RegEx:最小可能匹配或非贪婪匹配

时间:2009-12-17 07:12:17

标签: .net regex

如何告诉RegEx(.NET版本)获得最小的有效匹配而不是最大的?

3 个答案:

答案 0 :(得分:153)

对于.*.+等正则表达式,请附加问号(.*?.+?)以匹配尽可能少的字符。要选择性匹配某个部分(?:blah)?,但除非绝对必要,否则请使用(?:blah){0,1}?之类的内容。对于重复匹配(使用{n,}{n,m}语法),请添加问号以尝试尽可能少地匹配(例如{3,}?{5,7}?)。

regular expression quantifiers上的文档也可能会有所帮助。

答案 1 :(得分:60)

非贪婪的算子?。像这样:

.*?

答案 2 :(得分:29)

非贪婪的算子并不意味着最短的匹配:

  

abcabk

a.+?k将匹配整个字符串(在此示例中),而不是仅匹配最后三个符号。

我想实际找到最小的匹配。

这是“a”的最后一次匹配仍然允许k的所有匹配。

我想这样做的唯一方法就是使用像:

这样的表达式
a[^a]+?k