我试图解析正则表达式(.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