Page 1 sur 1

[Résolu] Problème de regex...

Posté : 18 janv. 2008, 14:54
par zest
Bonjour,
Comme je suis une grossse truffe dans l'utilisation des REGEX :? , j'aimerais savoir comment extraire la fin d'une chaîne après un certain caratère:
j'ai par exemple:
$var = "abcdef;ghty";
coment récuperer "ghty", ou en général la fin de cette chaine après la virgule, en sachant qu'elle peut être (la fin de la chaîne :lol: ) de n caratères.

Merci

Posté : 18 janv. 2008, 15:03
par Genova
Bonjour,
regarde les fonctions strstr() ou strchr() qui semblent bien indiquées.

Posté : 18 janv. 2008, 15:04
par Berzemus
un regex comme ceci devrait faire l'affaire:
(?<=;).*
Il prend tout ce qui est précédé par un ";"

Posté : 18 janv. 2008, 15:56
par zest
ok pour strstr(), mais il prend en compte la virgule ';'...
$var = "abcdef;ghty";
$rslt = strstr($var,";");
echo $rslt;
ce qui donne

Code : Tout sélectionner

;ghty
il me faudrait le même résultat, sans la virgule et quelque soit la longueur de la chaîne...

bon en fait je contourne le problème...
$var = "abcdef;ghty";
$rslt = strstr($var,";");
echo trim($rslt,";");
et c'est OK :D

Posté : 19 janv. 2008, 11:17
par titerm
La solution la plus logique
substr(strrchr($var, ";"), 1);
La solution basé sur les regexp (déconseillé dans un cas aussi simple),
Nb: La reg exp fournie plus haut est incorrecte
preg_match('/([^;]*)$/',$var,$matches)
[/code]

Posté : 19 janv. 2008, 12:17
par Berzemus
(...) Nb: La reg exp fournie plus haut est incorrecte (...)
incorrecte ?

Ben je voudrais bien savoir ou tiens :roll: .

Sinon, bien qu'il est vrai que le regex est un peu overkill pour cette application, il ne faut jamais rater une occasion de s'y intéresser ^-^

Posté : 19 janv. 2008, 14:19
par titerm
Bas elle matchera trop.
Si tu as plusieurs ; dans la chaîne, elle match tout après le premier ; hors il demande la fin de la chaîne après un ;

test sur un cas avec plusieurs ;

Code : Tout sélectionner

abcdef;888;jhgkjh;123
maintenant, c'est peut être moi qui interprète mal la demande

Posté : 19 janv. 2008, 14:44
par Berzemus
Y'a deux écoles.. récuperer tout après le premier, ou ne récuperer que ce qu'il y a derrière le dernier.. C'est différent, mais c'est pas "incorrect".

C'est à Zest de dire ce qu'il veut vraiment (sa demande n'est pas très claire à ce sujet), mais en même temps, s'il savait tout ce qui est possible, il n'y aurait plus de questions.

Peut-être qu'au fond, un petit explode() pourrait résourdre tout ses problêmes.
$var = "abc;123;tagada";
$array = explode(";",$var);

echo $array[0]; //abc
echo $array[1]; //123
echo $array[2]; //tagada

Posté : 19 janv. 2008, 21:03
par titerm
Bah disons que la solution qu'il retient au finale correspond plus à une école qu'à l'autre...
peut importe, faire une regexp pour cela est un mauvais choix.