2011-04-22 83 views

回答

2

使用回顧後先行之前和之後,像這樣:

(?<=^|[^=])={2}[a-zA-z0-9 ]*={2}(?=$|[^=]) 

編輯:雖然這種解決方案的工作原理,它是效率不高如賈斯汀的。

+0

這一個是到目前爲止好。 你贏了,因爲速度,@ridgerunner 我認爲還有一些其他的變化,人們已經發布,也將工作。我也會嘗試一下。感謝前瞻和後視運營商的想法。 – 2011-04-22 15:51:04

+0

爲了良好的運動精神而歡呼,+1因爲你的回答仍然正確。 – 2011-04-22 18:41:52

2

這看起來像lookarounds工作:

(?<!=)==[a-zA-z0-9 ]*==(?!=) 

我發現上面要做到這一點是最可讀的方式。您也可以使用下面的,其工作本質上是相同的:他們之間

==(?<!={3})[a-zA-z0-9 ]*(?!={3})== 

這也將讓你在相同的字符串匹配多次,只要有一個突破(任何非=字符) 。例如,==foo== ==bar==應產生2個匹配,而==foo====bar==應該不產生任何結果。

+0

是的,這種負面的查找解決方案消除了檢查我的(低級)答案需要的字符串邊緣案例的開始和結束的需要。這個答案應該被選爲最好的。 +1 – ridgerunner 2011-04-22 17:30:56

0
^={2}[a-zA-z0-9\s]+={2}$ 

\s匹配空白
^表示開始時
$表示端

+0

您也可以使用[\ w \ s]作爲字符類。 – erisco 2011-04-22 15:53:56

+1

@erisco:'\ w''還包含其他字符,具體取決於區域設置。例如,如果使用法語區域設置,重音字符將被匹配(可能或不需要)... – ircmaxell 2011-04-22 16:08:07

相關問題