我有這樣的字符串:使用preg_match_all嵌套括號
這是一個{{文本}}爲{{測試}} PHP {{正則表達式}}
我使用下面的模式來得到包含數組{{文本}},{{測試}},{{正則表達式}}
/\{\{.+\}\}/
但它返回只1個元素的數組:
「{{文本}}是用於{{testing}} php {{正則表達式}}「
也試過這樣:
/\{\{(?R)|.+\}\}/
,但我得到了相同的結果。
這種模式有什麼問題?
謝謝。
我有這樣的字符串:使用preg_match_all嵌套括號
這是一個{{文本}}爲{{測試}} PHP {{正則表達式}}
我使用下面的模式來得到包含數組{{文本}},{{測試}},{{正則表達式}}
/\{\{.+\}\}/
但它返回只1個元素的數組:
「{{文本}}是用於{{testing}} php {{正則表達式}}「
也試過這樣:
/\{\{(?R)|.+\}\}/
,但我得到了相同的結果。
這種模式有什麼問題?
謝謝。
嘗試使用/\{\{.+?\}\}/
,注意?,原件是貪婪的,這意味着它會匹配儘可能多的字符,因爲它可以,如果你有。+它意味着它會從第一個{到最後}。
+?
,*?
是+
和*
的非貪婪版本。
我認爲更快的解決方案將是正則表達式/\{\{([^}]+)\}\}/
,因爲非貪婪量詞一個接一個地逐個字母地獲取,直到它到達右括號,而這個正則表達式在第一次嘗試時將所有東西都消耗到右括號。
編輯
另外,我覺得OP想匹配的結果工作,所以添加周圍[^}]+
匹配的括號。
''/\{.*?\}/ i'',你爲什麼想要匹配雙括號?嘗試我的正則表達式並告訴我們是否得到期望的結果。 – 2011-04-03 19:05:08
@poelinca:對不起,錯誤!編輯! – 2011-04-03 19:30:57
'/\{\{.*?\}\}/ i''應該可以工作 – 2011-04-03 19:33:34