2010-12-15 81 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

。*是一个“贪婪的”匹配,并进入括号的最后一个匹配。

*?指定消耗尽可能少重复的第一次匹配(相当于懒*)