我需要一個PHP正則表達式識別類似的模式:匹配正好用兩個「=」字符的字符串兩邊
==敏捷的棕色狐狸==
正則表達式無法比擬的然而:
===敏捷的棕色狐狸===
我有下面的正則表達式構造 - 我所以接近:
={2}[a-zA-z0-9 ]*={2}
我需要一個PHP正則表達式識別類似的模式:匹配正好用兩個「=」字符的字符串兩邊
==敏捷的棕色狐狸==
正則表達式無法比擬的然而:
===敏捷的棕色狐狸===
我有下面的正則表達式構造 - 我所以接近:
={2}[a-zA-z0-9 ]*={2}
使用回顧後先行之前和之後,像這樣:
(?<=^|[^=])={2}[a-zA-z0-9 ]*={2}(?=$|[^=])
編輯:雖然這種解決方案的工作原理,它是效率不高如賈斯汀的。
這看起來像lookarounds工作:
(?<!=)==[a-zA-z0-9 ]*==(?!=)
我發現上面要做到這一點是最可讀的方式。您也可以使用下面的,其工作本質上是相同的:他們之間
==(?<!={3})[a-zA-z0-9 ]*(?!={3})==
這也將讓你在相同的字符串匹配多次,只要有一個突破(任何非=
字符) 。例如,==foo== ==bar==
應產生2個匹配,而==foo====bar==
應該不產生任何結果。
是的,這種負面的查找解決方案消除了檢查我的(低級)答案需要的字符串邊緣案例的開始和結束的需要。這個答案應該被選爲最好的。 +1 – ridgerunner 2011-04-22 17:30:56
這一個是到目前爲止好。 你贏了,因爲速度,@ridgerunner 我認爲還有一些其他的變化,人們已經發布,也將工作。我也會嘗試一下。感謝前瞻和後視運營商的想法。 – 2011-04-22 15:51:04
爲了良好的運動精神而歡呼,+1因爲你的回答仍然正確。 – 2011-04-22 18:41:52