Expression Reguliere

Petit nouveau ! | 8 Messages

12 déc. 2010, 09:05

Bonjour,

Je ne demande pas souvent d'aide, mais la je bloque.

Voici mon probleme:
J'ai une chaine de caratere qui contient des valeures du type: "Ur r". Dans cette, il faut que je remplace r par une variable. Il ne faut pas toucher au caractere "r" precede par U.

J'imagine qu'il faut faire ca avec preg_replace, mais jusque la, je n'ai reussi a faire en sorte que la regle avec le U soit respectee.

Merci d'avance pour votre aide.

Eléphant du PHP | 209 Messages

12 déc. 2010, 10:20

echo preg_replace("/([^U])r/","$1toto","rblablar Ur blublu r r r Ur");
Argh, ca marche pas si la chaine commence par un r ...
--
Eric

Petit nouveau ! | 8 Messages

12 déc. 2010, 10:36

Merci pour ta reponse epommate2.

C'est justement mon probleme, je n'arrive pas a comprendre tous les cas dans une seule regexp.

Pour le moment j'en ai donc deux, celle que tu viens de me donner, puis une dans le cas ou r est le premier caractere, mais il est possible de faire mieux j'imagine donc si quelqu'un a une idee, je reste preneur.

Eléphant du PHP | 209 Messages

12 déc. 2010, 10:51

Et ça :
echo preg_replace("/^r|([^U])r/","$1toto","rblablar Ur blublu r r r Ur");
--
Eric

Petit nouveau ! | 8 Messages

12 déc. 2010, 11:03

Ah oui en effet il fallait y penser.

Merci a toi ;)

ViPHP
ViPHP | 5462 Messages

12 déc. 2010, 22:38

l'expression correct serait plus :
echo preg_replace('/(?<!U)r/','toto','rblablar Ur blublu r r r Ur');

Eléphant du PHP | 209 Messages

13 déc. 2010, 06:36

Je vois bien que c'est plus joli, mais en quoi est-ce plus correct ? Je n'arrive pas a voir des des mots qui match différemment ?
--
Eric

ViPHP
ViPHP | 5462 Messages

13 déc. 2010, 10:41

Je vois bien que c'est plus joli, mais en quoi est-ce plus correct ? Je n'arrive pas a voir des des mots qui match différemment ?
parce que t'as une condition et un groupement alors qu'une assertion suffis :wink: