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