【问题标题】:Combine regex capture groups into 1 array?将正则表达式捕获组组合成 1 个数组?
【发布时间】:2015-02-06 14:05:02
【问题描述】:

在 PHP 中,我有以下正则表达式来匹配 [] 或 {} 之间的单词:

\[([^\]]*)\]|\{([^\}]*)\}

当在这个文本上使用这个时:

xyz[word1]abc[word2]def{word4}ghi[word5]jkl{word6}mno

preg_match_all('/\[([^\]]*)\]|\{([^\}]*)\}/i', 'xyz[word1]abc[word2]def{word4}ghi[word5]jkl{word6}mno', $result);

我得到一个包含 3 个数组的数组,其中 2 个不同的捕获组作为 2 个 不同 数组。

正则表达式是说明问题的一个简单示例,因此不能简单地将正则表达式仅使用 1 个捕获组。我必须有 2 个不同的捕获组,但只需要在 1 个结果数组中使用它们。

那么,有没有办法将多个捕获组组合成 1 个捕获结果数组?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    使用branch reset group (?|.....) 将多个捕获转换为一个。

    (?|\[([^\]]*)\]|\{([^\}]*)\})
    

    也就是说,分支重置组内的替代项共享相同的捕获组。

    DEMO

    【讨论】:

      猜你喜欢
      • 2018-01-13
      • 2020-01-02
      • 2015-07-24
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多