【问题标题】:How can I find all matches of '{{**** *** **}}' with a regex?如何使用正则表达式找到“{{**** *** **}}”的所有匹配项?
【发布时间】:2009-10-11 18:17:18
【问题描述】:

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

我有一个可以工作的基本正则表达式:

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

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

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

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

如何修改正则表达式使其在这两种情况下都有效?

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,它成功了。我会接受你的回答,因为它只添加了 1 个字符(我很懒 ;))并且你提供了额外的解释。
      【解决方案3】:
      preg_match_all("/{{([^}]*)}}/", $description, $nomsTags);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 2011-06-09
        • 1970-01-01
        相关资源
        最近更新 更多