2011-09-15 53 views
0

我有這樣的正則表達式:問題的或正則表達式

/\{%\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]

我在做什麼錯?

+0

在我的正則表達式測試程序中,它與項目3到6相匹配。如果使用了'/\\{%\\s([^else|endloop|endif][a-z0-9\\.\\|_ ] +)\\ s%\\}/si' – Scuzzy

+0

試試這個 - http://www.functions-online.com/preg_replace.html並將$ replacement替換爲$ 1 – Mirgorod

回答

4

我想你可能打算:

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

以前包含elseendloopendif關鍵字方括號將每個個性作爲例外。在這裏他們被視爲整個字符串。