将正则表达式捕获组合并为1个数组?

时间:2015-02-06 14:05:02

标签: php regex

在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 个答案:

答案 0 :(得分:0)

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

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

也就是说,分支重置组内的备选方案共享相同的捕获组。

DEMO