我是靠谱客的博主 迷人早晨,最近开发中收集的这篇文章主要介绍PHP正则-贪婪匹配(最大匹配) 和最小匹配的问题。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

贪婪匹配(最大匹配) 和最小匹配的问题。

在抓取链接地址时,使用以下正则时发现,当在<a href="XXX">链接标题</a> 链接标题中含有HTML代码时,不能抓取到地址。
/<a[^>]+href=[/"/']{0,1}([^>/"/'/s]+)[/"/']{0,1}[^>]*>([^>]+)<//a>/i
尚若换成以下方式
/<a[^>]+href=[/"/']{0,1}([^>/"/'/s]+)[/"/']{0,1}[^>]*>(。+)<//a>/i
则不能抓取到你需要的链接数据,默认情况下,perl使用的是贪婪匹配模式,也就是尽可能多的匹配数据。
如:下面的脚本打印出“matched defgabcdef”,因为它尽可能多地匹配模式,直至结尾的‘g’。

$data = 'abcdefgabcdefg';
$data =~ /abc(.+)g/i;
print "matched ";

要改变匹配特点,只须简单地在量词(加号[+]或星号[*])后面加一个问号(?)即可。在上面的程序中把模式改为在‘+’之后包含一个‘?’。

$data =~ /abc(.+?)g/i;

输出变成“matched def”,因为模式不再贪婪,而在允许模式匹配的同时匹配最少数目的字符。

对于可能得到的匹配多于期望的匹配的情况,最小匹配是必要的。

改成以下正则:
/<a[^>]+href=[/"/']{0,1}([^>/"/'/s]+)[/"/']{0,1}[^>]*>(.+?)<//a>/i
则可以抓取到需要的链接.

 

文章来源地址为:http://www.lampba.com/home-space-uid-4-do-blog-id-22.html

最后

以上就是迷人早晨为你收集整理的PHP正则-贪婪匹配(最大匹配) 和最小匹配的问题。的全部内容,希望文章能够帮你解决PHP正则-贪婪匹配(最大匹配) 和最小匹配的问题。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部