.net 要排除子字符串的正则表达式
我正试图解析带有正则表达式(.NET)的字符串,并查找所有以.net 要排除子字符串的正则表达式,.net,regex,.net,Regex,我正试图解析带有正则表达式(.NET)的字符串,并查找所有以[[开头,以]]结尾的自定义标记。我的第一次尝试是使用\[\[(.*)\]\]。当一个字符串中只有一个标记时,这似乎起作用。但是如果有多个,它只返回一个结果,从第一个[[到最后一个] 我的想法是将]]从匹配字符中排除,但我还没有找到一种方法来实现这一点。我尝试过使用排除集(?!\]\])并使用不同的语法,但找不到任何实际有效的方法 有人知道一种简单的方法吗?正则表达式在默认情况下是贪婪的,即它们消耗尽可能多的字符。为了避免这种情况,在“
[[
开头,以]]
结尾的自定义标记。我的第一次尝试是使用\[\[(.*)\]\]
。当一个字符串中只有一个标记时,这似乎起作用。但是如果有多个,它只返回一个结果,从第一个[[
到最后一个]
我的想法是将]]
从匹配字符中排除,但我还没有找到一种方法来实现这一点。我尝试过使用排除集(?!\]\])
并使用不同的语法,但找不到任何实际有效的方法
有人知道一种简单的方法吗?正则表达式在默认情况下是贪婪的,即它们消耗尽可能多的字符。为了避免这种情况,在“*”后面加一个“?”,即尝试
\[\[(.*?\]\]\]
甚至比这更简单,尝试使用*?
(最后一个?表示这是一个不吉利的匹配,意味着在捕获信息时它将抓住最简单的部分)
作为参考,请退房。它将为您提供关于贪婪vs.ungreedy的更多详细信息。*是“贪婪”匹配,并转到括号中的最后一个匹配
*??指定消耗尽可能少的重复次数的第一个匹配(相当于lazy*)Perfect。正是我需要的。我忘记了regex的贪婪概念,因为我没有太多地使用它。当然,你需要避开那些打开的方括号。OP显示了,但直到我添加了代码格式,它们才显示。@Alan Moore:谢谢,我试着同意OP。我只是相应地编辑了这个答案。
*?
将始终不匹配任何内容。我想没有比这更简单的了PHeh,更像是原始正则表达式的一部分,但有一点值得注意