Expression régulière : Tout sauf une chaine

Eléphanteau du PHP | 38 Messages

29 sept. 2011, 16:06

Bonjour,

Je cherche à faire une expression régulière ou je recherche tout sauf une chaine de caractère précise.

[^abc] signifie tout sauf a ou b ou c or moi j'aimerai tout sauf la chaine abc.

Est ce que c'est possible à faire ?

En javascript avec les reg exp à priori faut faire ^(!?abc$) mais ça fonctionne pas en php :/

Merci !

Eléphant du PHP | 275 Messages

29 sept. 2011, 16:13

'/^(!?abc)$/'

Eléphanteau du PHP | 38 Messages

29 sept. 2011, 17:12

Merci mais ça pose un soucis, car je dois dire qu'il doit y avoir plusieurs caractères et mettre un + après le $ fait une erreur. Entourer le tout en parenthèse ne fait pas le remplacement :/

Ce que je veux : tout sauf la chaine url

Voila l'expression entière

$chaine = preg_replace('&\*)\]^(!?url)$\[/url\]&ie', <a href="'\\1">\\3</a> ', $chaine);

Ma chaine de test : [url=http://www.exemple.com/aze[test]aze]test


Actuellement ça ne fait pas le remplacement.

Ce que j'utilise pour l'instant mais qui interdit de mettre des crochets dans le texte du lien c'est ([^\[]) a la place de ^(!?url)$



Merci.

Eléphant du PHP | 275 Messages

29 sept. 2011, 18:05

\\$ alors. Parce que $ c'est un caractère spécial

Eléphanteau du PHP | 38 Messages

29 sept. 2011, 20:30

Y'a rien à faire ça fonctionne pas :/ J'arrive pas a lui dire tout sauf la chaine "url"

$chaine = "aze-url-aze";

$chaine = preg_replace('/aze-^(!?url)$-aze/', 'good', $chaine); => match pas
$chaine = preg_replace('/aze-^(!?url)$+-aze/', 'good', $chaine); => Compilation failed
$chaine = preg_replace('/aze-^(!?url)\\$+-aze/', 'good', $chaine); => match pas
$chaine = preg_replace('/aze-^(!?url$)+-aze/', 'good', $chaine); => match pas
$chaine = preg_replace('/aze-[^url]+-aze/', 'good', $chaine); => ça fait différent de u OU r OU l au lieu de différent de url
$chaine = preg_replace('/aze-[^(^url$)]+-aze/', 'good', $chaine); => match pas

Je désespère :/

Eléphanteau du PHP | 38 Messages

02 oct. 2011, 17:22

Up !

Toujours personne qui a la solution ?

Je cherche à dire en expression régulière : Tout sauf une suite de caractère.

Exemple /([^url]+)/ signifie tout sauf u OU r OU l mais moi je veux tout sauf la chaine url.

Merci !

Eléphanteau du PHP | 44 Messages

03 oct. 2011, 09:21

Utilise une fonction de callback avec preg_replace_callback()