如何使用正则表达式查找“​​{{**** *** **}}”的所有匹配项?

时间:2009-10-11 18:17:18

标签: php regex preg-match-all

我正在尝试扩展PHP Markdown以允许在文本的某些部分使用{{和}}(它们将成为搜索关键字,如标记)。

我有这个基本的正则表达式有点工作:

preg_match_all("/\{\{(.*)\}\}/", $description, $nomsTags);

除非在同一句话中有2个关键字时不起作用:

This {{is}} just an {{example}}.

返回“{{is}} just an {{example}}”而不是“{{is}}”和“{{example}}”。

如何修改正则表达式以便它在两种情况下都有效?

3 个答案:

答案 0 :(得分:3)

而不是。你可以使用[^}]

答案 1 :(得分:2)

量词是贪婪的。这意味着前面的表达式被扩展到可能重复的最大值。尝试使用非贪婪量词,方法是将?附加到量词:

/\{\{(.*?)\}\}/

答案 2 :(得分:0)

preg_match_all("/{{([^}]*)}}/", $description, $nomsTags);