Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 要排除子字符串的正则表达式_.net_Regex - Fatal编程技术网

.net 要排除子字符串的正则表达式

.net 要排除子字符串的正则表达式,.net,regex,.net,Regex,我正试图解析带有正则表达式(.NET)的字符串,并查找所有以[[开头,以]]结尾的自定义标记。我的第一次尝试是使用\[\[(.*)\]\]。当一个字符串中只有一个标记时,这似乎起作用。但是如果有多个,它只返回一个结果,从第一个[[到最后一个] 我的想法是将]]从匹配字符中排除,但我还没有找到一种方法来实现这一点。我尝试过使用排除集(?!\]\])并使用不同的语法,但找不到任何实际有效的方法 有人知道一种简单的方法吗?正则表达式在默认情况下是贪婪的,即它们消耗尽可能多的字符。为了避免这种情况,在“

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

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


有人知道一种简单的方法吗?

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

甚至比这更简单,尝试使用
*?
(最后一个?表示这是一个不吉利的匹配,意味着在捕获信息时它将抓住最简单的部分)

作为参考,请退房。它将为您提供关于贪婪vs.ungreedy的更多详细信息。

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


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

Perfect。正是我需要的。我忘记了regex的贪婪概念,因为我没有太多地使用它。当然,你需要避开那些打开的方括号。OP显示了,但直到我添加了代码格式,它们才显示。@Alan Moore:谢谢,我试着同意OP。我只是相应地编辑了这个答案。
*?
将始终不匹配任何内容。我想没有比这更简单的了PHeh,更像是原始正则表达式的一部分,但有一点值得注意