正则表达式以排除子串

时间:2010-12-15 14:36:57

标签: .net regex

我正在尝试使用正则表达式(.NET)解析字符串,并找到所有以[[开头并以]]结尾的自定义标记。我的第一次尝试是使用\[\[(.*)\]\]。当字符串中只有一个标记时,这似乎有效。但如果有多个,则只返回从第一个[[到最后]]的一个结果。

我的想法是从匹配的字符中排除]],但我还没有找到一种方法来实现这一点。我尝试过使用排除集(?! \]\])并使用不同的语法,但找不到任何实际可行的内容。

任何人都知道一种简单的方法吗?

3 个答案:

答案 0 :(得分:2)

默认情况下,正则表达式是贪婪的,即它们消耗尽可能多的字符。为了避免这种情况,请设置“?”在“。*”之后,即尝试\[\[(.*?)\]\]

答案 1 :(得分:0)

它比这更简单,尝试使用.*?(最后一个?意味着它是一个不合适的匹配,这意味着它会在捕获信息时抓住最低限度)。

供参考,请查看this site on regex。它将为您提供有关贪婪与不同意的更多详细信息。

答案 2 :(得分:0)

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

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