2009-08-14 9 views
0

Besoin d'aide avec Regex:Pourquoi cette regex PHP me donne-t-elle une erreur?

Je veux remplacer

[url=http://youtube.com]YouTube.com[/url] 

avec

<a href="http://youtube.com">YouTube.com</a> 

la regex

preg_replace("/[url=(.*?)](.*?)[/url]/is", '<a href="$1">$2</a>', $text); 

pourquoi cela me donne:

Warning: preg_replace() [function.preg-replace]: Inconnu modificateur 'r' dans C: \ Programa \ wamp \ www \ func.php sur la ligne 18

Répondre

6

Vous devez échapper à des caractères spéciaux dans l'expression régulière:

preg_replace('/\[url=(.*?)](.*?)\[\/url]/is', '<a href="$1">$2</a>', $text); 

J'échappé aux [ caractères (ils précisent le début d'une classe de caractères) et le caractère / (il précise les limites de l'expression régulière.)

Alternativement (pour le caractère /) vous pouvez utiliser un autre caractère de limite:

preg_replace('#\[url=(.*?)](.*?)\[/url]#is', '<a href="$1">$2</a>', $text); 

Vous devez toujours échapper les caractères [, cependant.

1

PHP interprète le '/' dans /url comme étant la fin de l'expression rationnelle et le début des options regex. Insérez un '\' avant de le rendre littéral '/'.

Vous avez besoin d'échapper les '[' de la même manière (sinon ils seront interprétés comme introduisant une classe de caractères).

preg_replace("/\[url=(.*?)](.*?)\[\/url]/is", '<a href="$1">$2</a>', $text); 
+0

Comme: \ [url = (. *?) \] (. *?) \ [\/Url \] –

0

Les deux barres obliques et crochets sont des caractères spéciaux dans regex, vous devez leur échapper:

\/ \[ \] 
0

Le 2ème «/» dans une chaîne regex met fin à la regex. Vous devez y échapper. De plus, preg_replace interprétera '[url = (. *?)]' Comme une classe de caractères, vous devez donc également les échapper.

preg_replace('/\[url=(.*?)\](.*?)\[\/url\]/is', '<a href="$1">$2</a>', $text); 
0

Vous semblez commencer avec des expressions régulières. Si tel est le cas - ou peut-être même si ce n'est pas le cas - vous trouverez que the Regex Coach est un outil très utile. Il fournit un bac à sable pour nous de tester nos correspondances de modèle et nos chaînes de remplacement aussi. Si vous aviez utilisé cela, cela aurait souligné le besoin d'échapper aux caractères spéciaux.

+0

semble bien merci –

Questions connexes