使用preg_match_all表示嵌套括号

时间:2011-04-03 19:00:29

标签: php pcre preg-match-all

我有一个这样的字符串:

这是{{testing}} PHP {{regular expression}}

的{{text}}

我使用以下模式来获取包含{{text}},{{testing}},{{regular expression}}

的数组
/\{\{.+\}\}/

但是它返回一个只有1个元素的数组:

{{text}} {{testing}} php {{regular expression}}“

还试过这个:

/\{\{(?R)|.+\}\}/

但我得到的结果相同。

这种模式有什么问题?

感谢。

2 个答案:

答案 0 :(得分:3)

尝试使用/\{\{.+?\}\}/,注意?,原始是贪婪的,这意味着它将匹配尽可能多的字符,如果你有。+它意味着它将从第一个{到最后一个} }。

+?*?+*的非贪婪版本。

答案 1 :(得分:0)

我认为更快的解决方案是正则表达式/\{\{([^}]+)\}\}/,因为非贪婪的量词会逐字逐句地获得,直到达到右括号,而这个正则表达式在第一次尝试时将所有内容都放到右括号。

修改

另外,我认为OP希望使用匹配的结果,因此在[^}]+周围添加了匹配的括号。