正则表达式中的问题

时间:2011-09-15 22:28:26

标签: php regex preg-replace pcre

我有这个Regexp:

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

我在preg_replace中使用此regexp。 这个标记:

{# 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 个答案:

答案 0 :(得分:4)

我想你可能打算:

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

之前包含elseendloopendif关键字的方括号将每个字符视为例​​外。在这里,他们被视为整个字符串。