正则贪婪与非贪婪
贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配 成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少 的匹配。
属于贪婪模式的量词,也叫做匹配优先量词,包括:
"{m,n}"、"{m,}"、"?"、"*"和"+"。
在一些使用NFA引擎的语言中,在匹配优先量词后加上”?”,即变成属于非贪婪模式的量词, 也叫做忽略优先量词,包括:
"{m,n}?"、"{m,}?"、"??"、"*?"和"+?"
区别
以字符串<div>test4567</div><div>other</div>
为例
表达式<div>.*</div>
,匹配的字符串<div>test4567</div><div>other</div>
表达式<div>.*?</div>
,匹配的字符串<div>test4567</div>
表达式<div>\w*(\d+)</div>
匹配字符串<div>test4567</div>
,$1 的值7
表达式<div>\w*?(\d+)</div>
匹配字符串<div>test4567</div>
,$1 的值4567
说明
贪婪模式,是尽可能多的匹配数据。如果后面有其他的表达式,或者再往后会导致整体匹配 失败,则进行回溯。
非贪婪模式,尽可能少的匹配数据,在保证整体匹配成功的情况下,匹配最少的数据,回溯 多次,确保匹配结果最小。
评论