我試圖解析正則表達式(.NET)的字符串,並找到所有自定義標記開始[[
並以]]
結尾。我第一次嘗試使用\[\[(.*)\]\]
。這似乎在字符串中只有一個令牌時起作用。但是如果有多個,它只會從第一個[[
返回一個結果到最後一個]]
。正則表達式排除子字符串
我的想法是從匹配的字符中排除]]
,但我還沒有找到一種方法來實現這一功能。我試過使用排除集(?! \]\])
,並用不同的語法來演奏,但是找不到任何實際可行的東西。
任何人都知道一個簡單的方法來做到這一點?
我試圖解析正則表達式(.NET)的字符串,並找到所有自定義標記開始[[
並以]]
結尾。我第一次嘗試使用\[\[(.*)\]\]
。這似乎在字符串中只有一個令牌時起作用。但是如果有多個,它只會從第一個[[
返回一個結果到最後一個]]
。正則表達式排除子字符串
我的想法是從匹配的字符中排除]]
,但我還沒有找到一種方法來實現這一功能。我試過使用排除集(?! \]\])
,並用不同的語法來演奏,但是找不到任何實際可行的東西。
任何人都知道一個簡單的方法來做到這一點?
默認情況下,正則表達式是貪婪的,即它們消耗盡可能多的字符。爲了避免這一點,把「?」在「。*」之後,即嘗試\[\[(.*?)\]\]
。
它比這更簡單,嘗試使用.*?
(最後?意味着它是一個非常規的匹配,這意味着它會捕獲信息時最低限度)。請參考this site on regex。它會給你更多關於貪婪vs不合理的細節。
'。*?'總是一無所獲。我想它並沒有比這更簡單。 :P – 2010-12-15 16:27:30
heh,是更多的原始正則表達式的一部分,但點指出。 ;-) – 2010-12-15 18:51:55
。*是一個「貪婪的」匹配,並進入括號的最後一個匹配。
*?指定消耗盡可能少重複的第一次匹配(相當於懶*)
完美。正是我需要的。我忘記了正則表達式的貪婪概念,因爲我沒有太多用它。 – jwynveen 2010-12-15 15:16:19
當然,你需要逃避那些開放的方括號。 OP確實,但是直到我添加了代碼格式時才顯示出來。 – 2010-12-15 16:30:14
@Alan Moore:謝謝,我試着和OP一起去。我剛剛編輯了這個答案。 – sjngm 2010-12-16 06:25:17