2010-10-26 7 views
1

Donc, je n'avais pas fait de regexps depuis un moment, alors j'ai pensé que je rafraîchirais ma mémoire. J'essaye de convertir une chaîne comme a*b*c en a<b>b</b>c. Je l'ai déjà eu ce travail, mais maintenant je veux garder une chaîne comme a\*b\*c de transformer en a\<b>b\</b>c, mais plutôt, en a*b*c. Voici le code que je utilise maintenant:PHP Regex No Backslash

 $string = preg_replace("/\*([\s\S]*?)\*/", "<b>$1</b>", $input); 

J'ai essayé de mettre ce \\\\{0} avant les astérisques, et cela ne fonctionne pas. Aucun n'a fait [^\\\\].

Répondre

2

Essayez lookbehind négatif:

"/(?<!\\\\)\*([\s\S]*?)(?<!\\\\)\*/" 

Cela correspond seulement * si elle est pas précédée d'une \.

Ceci est cependant fragile; il échouerait également si la chaîne est escaped backslash \\*bold* text.

+0

Je reçois une erreur en essayant cela: 'Attention: preg_replace() [fonction.preg-replace]: Echec de compilation: manquant) au décalage 26' – Entity

+0

Lorsque j'utilise quatre barres obliques inverses, au lieu de deux, cela fonctionne exactement comme je J'en ai besoin pour! Merci! – Entity

+0

Ah oui, c'est vrai. Vous avez besoin de quatre antislashs - j'ai corrigé ma réponse. –