正则基础之——贪婪与非贪婪模式

正则基础之——贪婪与非贪婪模式

ID:9034406

大小:82.50 KB

页数:14页

时间:2018-04-15

正则基础之——贪婪与非贪婪模式_第1页
正则基础之——贪婪与非贪婪模式_第2页
正则基础之——贪婪与非贪婪模式_第3页
正则基础之——贪婪与非贪婪模式_第4页
正则基础之——贪婪与非贪婪模式_第5页
资源描述:

《正则基础之——贪婪与非贪婪模式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、正则基础之——贪婪与非贪婪模式1概述贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。属于贪婪模式的量词,也叫做匹配优先量词,包括:“{m,n}”、“{m,}”、“?”、“*”和“+”。在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括:“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。从

2、正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+”;被忽略优先量词修饰的子表达式使用的就是非贪婪模式,如“(Expression)+?”。对于贪婪模式,各种文档的叫法基本一致,但是对于非贪婪模式,有的叫懒惰模式或惰性模式,有的叫勉强模式,其实叫什么无所谓,只要掌握原理和用法,能够运用自如也就是了。个人习惯使用贪婪与非贪婪的叫法,所以文中都会使用这种叫法进行介绍。2贪婪与非贪婪模式匹配原理对于贪婪与非贪婪模式,可以从应用和原理两个角度进行理解,但如果想真正掌握,还是

3、要从匹配原理来理解的。先从应用的角度,回答一下“什么是贪婪与非贪婪模式?”2.1从应用角度分析贪婪与非贪婪模式2.1.1什么是贪婪与非贪婪模式先看一个例子举例:源字符串:aa

test1
bb
test2
cc正则表达式一:
.*
匹配结果一:
test1
bb
test2
正则表达式二:
.*?
匹配结果二:
test1
根据上面的例子,从匹配行为上分析一下,什是贪婪与非贪婪模式。正则表

4、达式一采用的是贪婪模式,在匹配到第一个“

”时已经可以使整个表达式匹配成功,但是由于采用的是贪婪模式,所以仍然要向右尝试匹配,查看是否还有更长的可以成功匹配的子串,匹配到第二个“
”后,向右再没有可以成功匹配的子串,匹配结束,匹配结果为“
test1
bb
test2
”。当然,实际的匹配过程并不是这样的,后面的匹配原理会详细介绍。仅从应用角度分析,可以这样认为,贪婪模式,就是在整个表达式匹配成功的前提下,尽可能多的匹配,也就是所谓的“贪婪”,通俗点讲,就是

5、看到想要的,有多少就捡多少,除非再也没有想要的了。正则表达式二采用的是非贪婪模式,在匹配到第一个“

”时使整个表达式匹配成功,由于采用的是非贪婪模式,所以结束匹配,不再向右尝试,匹配结果为“
test1
”。仅从应用角度分析,可以这样认为,非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配,也就是所谓的“非贪婪”,通俗点讲,就是找到一个想要的捡起来就行了,至于还有没有没捡的就不管了。2.1.2关于前提条件的说明在上面从应用角度分析贪婪与非贪婪模式时,一直提到的一个前提条件就是

6、“整个表达式匹配成功”,为什么要强调这个前提,我们看下下面的例子。正则表达式三:

.*
bb匹配结果三:
test1
bb修饰“.”的仍然是匹配优先量词“*”,所以这里还是贪婪模式,前面的“
.*
”仍然可以匹配到“
test1
bb
test2
”,但是由于后面的“bb”无法匹配成功,这时“
.*
”必须让出已匹配的“bb
test2
”,以使整个表达式匹配成功。这时整个表达式匹配的结果

7、为“

test1
bb”,“
.*
”匹配的内容为“
test1
”。可以看到,在“整个表达式匹配成功”的前提下,贪婪模式才真正的影响着子表达式的匹配行为,如果整个表达式匹配失败,贪婪模式只会影响匹配过程,对匹配结果的影响无从谈起。非贪婪模式也存在同样的问题,来看下面的例子。正则表达式四:
.*?
cc匹配结果四:
test1
bb
test2
cc这里采用的是非贪婪模式,前面的“
.*?

8、>”仍然是匹配到“

test1
”为止,此时后面的“cc”无法匹配成功,要求“
.*?
”必须继续向右尝试匹配,直到匹配内容为“
test1
bb
test2
”时,后面的“cc”才能匹配成功,整个表达式匹配成功,匹配的内容为“
test1
bb
test2
cc”

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。