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

问题描述:

在PHP我有以下正则表达式匹配是间[]或{}词:当使用这种在这个文本将正则表达式捕获组合并为1个数组?

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

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个结果数组。

那么,有没有什么办法可以将多个捕获组合成一个捕获结果数组?

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

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

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

DEMO

+1

工程就像一个魅力,非常感谢! – Dylan 2015-02-06 14:10:22