Php Regexp中存在问题
我有一个Regexp:Php Regexp中存在问题,php,regex,preg-replace,pcre,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
/\{%\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; %}
为什么此regexp不适用于{%item.text%}
而适用于其他?
我想我在这里犯了一些错误[^else | endloop | endif]
我做错了什么?我想你可能想:
/\{%\s((?!(else|endloop|endif))[a-z0-9\.\|_]+)\s%\}/si
先前包含
else
、endloop
和endif
关键字的方括号将每个字符视为例外。在这里,它们被视为整个字符串。我想您可能打算:
/\{%\s((?!(else|endloop|endif))[a-z0-9\.\|_]+)\s%\}/si
先前包含
else
、endloop
和endif
关键字的方括号将每个字符视为例外。在这里,它们被视为整个字符串。在我的正则表达式测试仪中,它是匹配的项目3到6。如果您使用“/\\{%\\s”([^else | endloop | endif][a-z0-9\\.\\\\\\\\\\\\\+)\\s%\\\\\\\\}/si'试试这个-并在我的正则表达式测试仪中将$replacement设置为$1,这是匹配的项目3到6。如果您使用“/\\{%\\s”([^else | endloop | endif][a-z0-9\\.\\\\\\\\\\\\\+)\\s%\\\\\\\}/si”,请尝试此操作,并将$replacement设置为$1