2010-12-15 38 views
0

我試圖解析正則表達式(.NET)的字符串,並找到所有自定義標記開始[[並以]]結尾。我第一次嘗試使用\[\[(.*)\]\]。這似乎在字符串中只有一個令牌時起作用。但是如果有多個,它只會從第一個[[返回一個結果到最後一個]]正則表達式排除子字符串

我的想法是從匹配的字符中排除]],但我還沒有找到一種方法來實現這一功能。我試過使用排除集(?! \]\]),並用不同的語法來演奏,但是找不到任何實際可行的東西。

任何人都知道一個簡單的方法來做到這一點?

回答

2

默認情況下,正則表達式是貪婪的,即它們消耗盡可能多的字符。爲了避免這一點,把「?」在「。*」之後,即嘗試\[\[(.*?)\]\]

+0

完美。正是我需要的。我忘記了正則表達式的貪婪概念,因爲我沒有太多用它。 – jwynveen 2010-12-15 15:16:19

+0

當然,你需要逃避那些開放的方括號。 OP確實,但是直到我添加了代碼格式時才顯示出來。 – 2010-12-15 16:30:14

+0

@Alan Moore:謝謝,我試着和OP一起去。我剛剛編輯了這個答案。 – sjngm 2010-12-16 06:25:17

0

它比這更簡單,嘗試使用.*?(最後?意味着它是一個非常規的匹配,這意味着它會捕獲信息時最低限度)。請參考this site on regex。它會給你更多關於貪婪vs不合理的細節。

+0

'。*?'總是一無所獲。我想它並沒有比這更簡單。 :P – 2010-12-15 16:27:30

+0

heh,是更多的原始正則表達式的一部分,但點指出。 ;-) – 2010-12-15 18:51:55

0

。*是一個「貪婪的」匹配,並進入括號的最後一個匹配。

*?指定消耗盡可能少重複的第一次匹配(相當於懶*)