【问题标题】:using preg_match_all for nested brackets使用 preg_match_all 嵌套括号
【发布时间】:2011-04-03 19:00:29
【问题描述】:

我有一个这样的字符串:

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

我使用以下模式获取包含 {{text}} 、 {{testing}} 、 {{regular expression}} 的数组

/\{\{.+\}\}/

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

"{{text}} for {{testing}} php {{正则表达式}}"

也试过这个:

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

但我得到了相同的结果。

这种模式有什么问题?

谢谢。

【问题讨论】:

  • '/\{.*?\}/i' ,你为什么要匹配双括号?试试我的正则表达式,告诉我们你是否得到了想要的结果。
  • @poelinca:很抱歉弄错了。已编辑!
  • '/\{\{.*?\}\}/i' 应该可以工作

标签: php pcre preg-match-all


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    编辑

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2021-10-13
      • 2010-11-27
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      相关资源
      最近更新 更多