2015-02-06 35 views
0

在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個結果數組。

那麼,有沒有什麼辦法可以將多個捕獲組合成一個捕獲結果數組?

回答

0

使用branch reset group(?|.....)可將多個捕獲轉換爲單個捕獲。

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

也就是說,分支機構重置組內的選項共享相同的捕獲組。

DEMO

+1

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