正则表达式,匹配{}之间的字符

时间:2010-07-28 15:09:37

标签: php regex

我正在尝试查找包含<或者>在{}之间。这是在HTML中,我很难让它成为“ungreedy”。

所以我想找到符合这些字符串的文字:

{test > 3}
{testing >= 3 : comment}
{example < 4}

我已经尝试了许多正则表达式,但所有这些都似乎继续结束}并且包括具有&lt;的HTML。或者&gt;。例如,我试过这个正则表达式

{.*?(<|>).*?}

但最终会匹配这样的文字:

{if true}<b>testing</b>{/if}

看起来非常简单,{}之间包含&lt;或&gt;。

4 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

{[^}]*(<|>).*}

答案 1 :(得分:1)

更高效的正则表达式(因为没有非贪婪的匹配):

'#{[^}<>]*[<>]+[^}]*}#'

第三个字符类中没有括号的原因是它匹配多个字符串的字符串&gt; (例如{foo <> bar} ...

答案 2 :(得分:0)

{[^}]*?(<|>)[^{]*?}

试试吧。请注意,我将.替换为一个字符类,这意味着除了左/右花括号之外的所有内容。

答案 3 :(得分:0)

您是否尝试过使用Ungreedy(U)开关?