php正则表达式—贪婪模式(或+)与懒惰模式(?或+?)的应用

企鹅博客 2019年8月14日05:42:11 评论 252


.表示除\n之外的任意字符; *表示匹配0-无穷; +表示匹配1-无穷;
.* — 表示匹配0个或多个处换行符以外的字符;
.+ — 表示
匹配1个或多个处换行符以外的字符;


后边没有?时表示贪婪模式(非懒惰模式);
后边多一个?表示懒惰模式;
?必须跟在*或者+后边用; 如: 如果用正则匹配src中内容非懒惰模式匹配 src=".*" 匹配结果是:src="test.jpg" width="60" height="80" 意思是从="往后匹配,直到最后一个"匹配结束 懒惰模式正则: src=".*?" 结果:src="test.jpg" 因为匹配到第一个"就结束了一次匹配。不会继续向后匹配。

在懒惰模式的正则(.*?或.+?)应用中会出现一种特殊的情况,
如:<{ if $test == "test"}> 我是测试数据<{ /if }>

如果使用懒惰模式的正则匹配<{和}>里面的内容(当<{和}>的内侧都存在空格,并且这个空格可有可无时), 我们一般这样写正则:
'/<\{\s*if\s*(.+?)
\s*
\}
>(.+?)<\{\s*\/if\s*\}>/ies'
特别注意其中有颜色的部分,尤其是绿色的部分。当懒惰正则后面紧跟着一个用*修饰的原子时,
如果在
}>前面存在“可用绿色部分(贪婪)匹配的内容”时,它会以绿色部分匹配到的内容为懒惰模式
的匹配结束点,匹配到这里后就结束匹配。

如果在
}>前面不存在“可用绿色部分(贪婪)匹配的内容”时,它会以绿色部分后面紧跟的一个原子(黄色部分)


为懒惰模式
的匹配结束点,匹配到这里后就结束匹配。


关于“贪婪模式”和“懒惰模式”,可参考博文“php正则表达式—修正模式”

以上就介绍了php正则表达式—贪婪模式(或+)与懒惰模式(?或+?)的应用,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

weinxin
欢迎加入中国SEO站长博客之家
本站的所有资源都会上传分享到博客之家,希望大家互相学习交流进步。
企鹅博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: