正则表达式-贪婪和非贪婪

前端之家收集整理的这篇文章主要介绍了正则表达式-贪婪和非贪婪前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
源字符串:aa<div>test1</div>bb<div>test2</div>cc

正则表达式一:<div>.*</div>
匹配结果一:<div>test1</div>bb<div>test2</div> (贪婪)
正则表达式二:<div>.*?</div>

匹配结果二:<div>test1</div>(这里指的是一次匹配结果,所以没包括<div>test2</div>) (非贪婪)


贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持

属于贪婪模式的量词,也叫做匹配优先量词,包括
“{m,n}”、“{m,}”、“?”、“*”和“+”。

在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括
从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+”;被忽略优先量词修饰的子表达式使用的就是非贪婪模式,如“(Expression)+?”。
对于贪婪模式,各种文档的叫法基本一致,但是对于非贪婪模式,有的叫懒惰模式或惰性模式,有的叫勉强模式,其实叫什么无所谓,只要掌握原理和用法,能够运用自如也就是了。个人习惯使用贪婪与非贪婪的叫法,所以文中都会使用这种叫法进行介绍。

猜你在找的正则表达式相关文章