正则表达式中的贪婪与非贪婪模式,如何区分和应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计9652个文字,预计阅读时间需要39分钟。
1. 概述:描述了贪婪与非贪婪模式的匹配行为,贪婪模式优先匹配,非贪婪模式尽量匹配。
2. 贪婪与非贪婪模式的影响:贪婪模式匹配成功后,会尽量多地进行匹配,而非贪婪模式则尽量少地进行匹配。
3. 应用场景:贪婪模式在整体表达式匹配成功时提前终止,非贪婪模式则尽可能多地匹配。
贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。
属于贪婪模式的量词,也叫做匹配优先量词,包括:
“{m,n}”、“{m,}”、“?”、“*”和“+”。
在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括:
“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。
从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+”;被忽略优先量词修饰的子表达式使用的就是非贪婪模式,如“(Expression)+?”。
对于贪婪模式,各种文档的叫法基本一致,但是对于非贪婪模式,有的叫懒惰模式或惰性模式,有的叫勉强模式,其实叫什么无所谓,只要掌握原理和用法,能够运用自如也就是了。
本文共计9652个文字,预计阅读时间需要39分钟。
1. 概述:描述了贪婪与非贪婪模式的匹配行为,贪婪模式优先匹配,非贪婪模式尽量匹配。
2. 贪婪与非贪婪模式的影响:贪婪模式匹配成功后,会尽量多地进行匹配,而非贪婪模式则尽量少地进行匹配。
3. 应用场景:贪婪模式在整体表达式匹配成功时提前终止,非贪婪模式则尽可能多地匹配。
贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。
属于贪婪模式的量词,也叫做匹配优先量词,包括:
“{m,n}”、“{m,}”、“?”、“*”和“+”。
在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括:
“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。
从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+”;被忽略优先量词修饰的子表达式使用的就是非贪婪模式,如“(Expression)+?”。
对于贪婪模式,各种文档的叫法基本一致,但是对于非贪婪模式,有的叫懒惰模式或惰性模式,有的叫勉强模式,其实叫什么无所谓,只要掌握原理和用法,能够运用自如也就是了。

