Aide avec les regex

Petit nouveau ! | 1 Messages

17 déc. 2007, 23:44

Bonjour,

Je n'arrive pas à bien cerner ce que preg_match_all me retourne. Voici le code :
$str="aabcc";
$pattern="/((a+)b?(c+))/";

preg_match_all($pattern,$str,$matches);
print_r($matches[0]);
Je m'attendrais aux retours suivants:

Code : Tout sélectionner

a aa c cc abc aabc abcc aabbcc
Mais j'ai toujours les chaînes maximales :

Code : Tout sélectionner

Array ( [0] => Array ( [0] => aabcc ) [1] => Array ( [0] => aabcc ) [2] => Array ( [0] => aa ) [3] => Array ( [0] => cc ) )
Est-ce possible de demander à PHP de retourner les sous-chaînes valides? J'ai dû louper un truc...

Merci!
Patrick

Eléphant du PHP | 493 Messages

19 déc. 2007, 21:40

Je m'attendrais aux retours suivants, mais j'ai toujours les chaînes maximales
Euh le retour obtenu correspond bien à ton regex !
Est-ce possible de demander à PHP de retourner les sous-chaînes valides? J'ai dû louper un truc...
Non ça n'est pas possible, du moins pas à ma connaissance !

ViPHP
ViPHP | 4039 Messages

20 déc. 2007, 11:32

A la limite, tu peux changer l'ordre de la variable de résultat avec les flags. (pêtit lien)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 déc. 2007, 12:07

Et si tu collais ta parenthèse capturante sur la lettre seulement ? (sans inclure le quantificateur j'entends) :
"/((a)+b?(c)+)/"
peux pas l'tester, mais en théorie tu devrais récupérer chaque "a", et rien ne t'empêche si tu veux l'ensemble également d'en coller deux paires : ((a)+)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...