Renvoyer ce qu'il y a entre deux strings, avant une string ou apres une string, dans une string source

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 394 fois - Téléchargée 30 fois


Contenu du snippet

Voila, je me suis mis au php il y a de ça une semaine, et je commence à vraiment apprecir depuis que j'ai appris l'existance des sockets!
Et comme dans tout language, lorsque je bosse avec les sockets, j'aime bien utiliser cette fonction permettant de renvoyer ce qu'il y a entre deux string, dans une string source.
Exemple :
str_entre("petitbatto!!","pe","!!") renverra "titbatto"
str_entre("petitbatto!!","","!!") renverra "petitbatto"
str_entre("petitbatto!!","petit","") renverra "batto!!"
str_entre("petitbatto!!","petit","zzz") renverra ""
str_entre("petitbatto!!","petit","batto!!") renverra ""

Assez pratique pour recuperer par exemple, la valeur d'un header HTTP.

Bref c'est un code sans pretentions, mais que j'estime très pratique, et que je n'ai pas trouvé ici.

Source / Exemple :


function Str_entre($strsource,$strleft,$strright) 
{ 

	if ($strleft <> "") // si strleft n'est pas vide...
		{
		$intstart = strpos($strsource,$strleft)+strlen($strleft); // ...alors on defini intstart = (sa position dans $strsource + sa taille)
		if (strpos($strsource,$strleft) === FALSE) return ""; // ...mais si elle n'est pas trouvé dans $strsource, on retourne une valeur vide.
 		}
	else 
		$intstart = 0; // si strleft est vide, on defini intstart = 0

        if ($strright <> "") // si strright n'est pas vide
       		{
       		$intlen = strpos(substr($strsource,$intstart,strlen($strsource)),$strright);  // ... alors on defini intlen = (sa position dans $strsource en partant de $intstart)
		if (strpos(substr($strsource,$intstart,strlen($strsource)),$strright) === FALSE) return ""; // ...mais si elle n'est pas trouvé dans $strsource, on retourne une valeur vide.
		}
	else 
		$intlen = (strlen($strsource) - $intstart); // si strright est vide, on defini intlen = (la longueur de $strsource - $intstart)
	
	
	return substr($strsource,$intstart,$intlen);	// on renvoit le resultat, commençant à $intstart de longueur $intlen)	
}

Conclusion :


bah ouais c'est court, mais hein... c'est le 1er script que je poste!

A voir également

Ajouter un commentaire Commentaires
cs_Ricou13 Messages postés 40 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 septembre 2006
18 juil. 2005 à 02:21
Il y avait plus court encore :

function Str_entre($strsource, $strleft, $strright)
{
eregi($strleft . '(.*)' . $strright, $strsource, $regs);
return $regs[1];
}

Je mets 5 parce que je viens de me mettre aux expressions régulières (que je ne maitrise pas encore, loin de là) et que j'aurais utilisé la même technique que toi, avant.

:-)
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
4 juil. 2005 à 01:34
y a un probleme avec codes-source, faut poster un comment pour que la mise à jour soit effective
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
3 juil. 2005 à 14:38
'tain ça fait 16h que j'ai mis le code à jour, quand je fais "modifier mon code", je vois mes modifs, mais lors de l'affichage, nada...
y a un problème!
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
2 juil. 2005 à 18:45
CS met du temps à mettre à jour, y avait un petit bug, résolu... faut juste attendre.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.