2011-09-15 5 views
0

J'ai ce Regexp:un problème ou Regexp

/\{%\s([^else|endloop|endif][a-z0-9\.\|_]+)\s%\}/si 

J'utilise cette expression rationnelle preg_replace. Et ce balisage:

{# comment %} 

{# comment number 2$% %} 

{% variable %} 

{% array.key1.key2 %} 

{% array.key1.key2|escape|bold %} 

{% variable|escape %} 

{% loop array as item %} 
    My item is {% item.text %} 
{% endloop %} 

{% if (something): %} 
    do something truly 
{% else: %} 
    nothing to do 
{% endif; %} 

Pourquoi cette expression rationnelle ne fonctionne pas pour {% item.text %} mais travaille avec d'autres? Je pense que j'ai fait une erreur ici [^else|endloop|endif]

Qu'est-ce que je fais mal?

+0

Dans mon testeur de regex il est adapté articles 3 à 6. Toute amélioration si vous avez utilisé « /\\{%\\s([^else|endloop|endif][a-z0-9\\.\\|_ ] +) \\% s \\}/si » – Scuzzy

+0

Try this - http://www.functions-online.com/preg_replace.html et réglez le remplacement de $ à 1 $ – Mirgorod

Répondre

4

Je pense que vous pouvez l'intention:

/\{%\s((?!(else|endloop|endif))[a-z0-9\.\|_]+)\s%\}/si 

Les crochets contenant déjà les else, endloop et endif mots-clés traite chaque caractère comme une exception. Ici, ils sont traités comme des chaînes entières.