2011-04-03 154 views
0

我有這樣的字符串:使用preg_match_all嵌套括號

這是一個{{文本}}爲{{測試}} PHP {{正則表達式}}

我使用下面的模式來得到包含數組{{文本}},{{測試}},{{正則表達式}}

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

但它返回只1個元素的數組:

「{{文本}}是用於{{testing}} php {{正則表達式}}「

也試過這樣:

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

,但我得到了相同的結果。

這種模式有什麼問題?

謝謝。

+1

''/\{.*?\}/ i'',你爲什麼想要匹配雙括號?嘗試我的正則表達式並告訴我們是否得到期望的結果。 – 2011-04-03 19:05:08

+0

@poelinca:對不起,錯誤!編輯! – 2011-04-03 19:30:57

+0

'/\{\{.*?\}\}/ i''應該可以工作 – 2011-04-03 19:33:34

回答

3

嘗試使用/\{\{.+?\}\}/,注意?,原件是貪婪的,這意味着它會匹配儘可能多的字符,因爲它可以,如果你有。+它意味着它會從第一個{到最後}。

+?,*?+*的非貪婪版本。

0

我認爲更快的解決方案將是正則表達式/\{\{([^}]+)\}\}/,因爲非貪婪量詞一個接一個地逐個字母地獲取,直到它到達右括號,而這個正則表達式在第一次嘗試時將所有東西都消耗到右括號。

編輯

另外,我覺得OP想匹配的結果工作,所以添加周圍[^}]+匹配的括號。