2009-10-08 68 views
0

需要給出以下字符串「其他文本[[MyText]]其他文本」,並給出了一些特定的字符,如「[[」for start和「]]」最後,能夠匹配「[[MyText]]」。正則表達式匹配給定字符之間的內容

鑑於以下regex = "(\[\[)(.*)(\]\])"我能夠匹配我想要的,但不完全一樣。

可以說我有這個字符串「其他文本[[Something ... [[MyText]] ......某事... [[MyOtherText]]」 - 我需要在這裏有2個匹配「[[ [MyText]]「& &」[[MyOtherText]]「。我的正則表達式太渴望,比我真正想要的更多。

請,除了我正在尋找理解它是如何工作的答案,所以一些評論也會有所幫助。謝謝。

回答

6

也許您在尋找non-greedy pattern或'perlre'。

(\[\[)(.*?)(\]\]) 

請注意,額外的'?'字符;

+0

+1,但它如何返回兩個匹配? – mouviciel 2009-10-08 13:47:54

+0

工作。我真的應該停止使用Visual Studio查找對話框來測試我的正則表達式,因爲我試過了,而Studio沒有發現任何東西! – 2009-10-08 14:06:39

+0

試試這個:http://www.radsoftware.com.au/regexdesigner/ – 2009-10-08 14:32:00

1

你需要的是這樣的:

regex = "\[\[([^\[]*)\]\]" 

它會不會有問題,如果你有一個「[」在你的文字你去匹配,或者嵌套對。

它這樣工作的原因是大多數正則表達式實現的默認greedy matching。簡而言之,貪婪的匹配正在儘可能地取勝。我的正則表達式工作的原因是它不允許另一個「[」(所以它不能貪婪地匹配下一個集合)。享受您的維基工作。

+0

看起來很可疑 - 捕手子句匹配零個或多個空心方括號(在最初的兩個之後)。這不是問題。 – 2009-10-08 13:47:42

+1

該正則表達式匹配「[[]]」,「[[[[[[[[]]」等)不是「[[MyText]]」。你可能意思是「\ [\ [[^ \]] * \] \]」 – 2009-10-08 13:49:23

+0

感謝Johnathan,Bart,我忘記了所有重要的^。 – 2009-10-08 14:02:57

0

嘗試:

\[{2}(?:(?!]]).)*]] 

單同樣適用['S和]的內部你的雙[[和]]的。

對於一個很好的說明,請參見:http://www.regular-expressions.info/repeat.html

注意]不是元字符(字符類外),所以沒有真正的需要,以逃避它。