RegEx:最小可能的匹配或非正式匹配

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

对于像.*.+这样的正则expression式,附加一个问号( .*?.+? )以尽可能less地匹配字符。 要可选地匹配一个部分(?:blah)? 但没有匹配,除非绝对必要,使用像(?:blah){0,1}? 。 对于重复匹配(使用{n,}{n,m}语法)追加一个问号以尽可能less匹配(例如{3,}?{5,7}? )。

正则expression式量词的文档也可能有帮助。

非贪婪的操作符? 。 像这样:

 .*? 

非贪婪的操作符并不意味着最短的匹配:

abcabk

a.+?k将匹配整个string(在本例中),而不是只匹配最后三个符号。

我想实际上find最小的可能匹配。

这是最后一个可能的匹配“ a ”,仍然允许k所有比赛。

我想唯一的方法就是使用如下expression式:

 a[^a]+?k