Проблема с или в регулярном выражении - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть это регулярное выражение:

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

Я использую это регулярное выражение в preg_replace. И эта разметка:

{# 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; %}

Почему это регулярное выражение не работает для {% item.text %}, но работает с другими? Я думаю, что здесь я допустил ошибку [^else|endloop|endif]

Что я делаю не так?

1 Ответ

4 голосов
/ 16 сентября 2011

Я думаю, что вы можете намереваться:

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

В квадратных скобках, ранее содержащих ключевые слова else, endloop и endif, каждый отдельный символ рассматривается как исключение. Здесь они рассматриваются как целые строки.

...