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

Eléphanteau du PHP | 35 Messages

18 janv. 2008, 14:54

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
Modifié en dernier par zest le 18 janv. 2008, 17:36, modifié 2 fois.
Peu de gens sont dignes de ne croire à rien.

ViPHP
ViPHP | 928 Messages

18 janv. 2008, 15:03

Bonjour,
regarde les fonctions strstr() ou strchr() qui semblent bien indiquées.

ViPHP
ViPHP | 4039 Messages

18 janv. 2008, 15:04

un regex comme ceci devrait faire l'affaire:
(?<=;).*
Il prend tout ce qui est précédé par un ";"
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 35 Messages

18 janv. 2008, 15:56

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
Peu de gens sont dignes de ne croire à rien.

Mammouth du PHP | 505 Messages

19 janv. 2008, 11:17

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]

ViPHP
ViPHP | 4039 Messages

19 janv. 2008, 12:17

(...) 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 ^-^
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 505 Messages

19 janv. 2008, 14:19

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

ViPHP
ViPHP | 4039 Messages

19 janv. 2008, 14:44

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
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 505 Messages

19 janv. 2008, 21:03

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.