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