PHP正则-贪婪匹配(最大匹配) 和最小匹配的问题。
来源:互联网 发布:linux pycharm 注册码 编辑:程序博客网 时间:2024/05/16 08:21
贪婪匹配(最大匹配) 和最小匹配的问题。
在抓取链接地址时,使用以下正则时发现,当在<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正则-贪婪匹配(最大匹配) 和最小匹配的问题。
- 正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
- 正则表达式的贪婪匹配和费贪婪匹配
- 正则表达式的贪婪匹配和非贪婪匹配
- 正则表达式的贪婪匹配和非贪婪匹配
- js正则表达式的贪婪匹配和非贪婪匹配
- (PHP)正则表达式-贪婪匹配与懒惰匹配的区别
- [perl]理解贪婪匹配和最小匹配之间的区别
- 正则表达式懒惰匹配,和贪婪匹配
- 正则中的“贪婪匹配”和“懒惰匹配”
- 正则表达式的【贪婪匹配】和【懒惰匹配】
- sed正则表达式最小匹配和最大匹配
- 正则表达式中贪婪匹配和非贪婪匹配
- python 正则表达式的贪婪匹配与非贪婪匹配
- 【转】正则表达式-贪婪匹配与非贪婪匹配的效率问题
- java 正则贪婪匹配
- PHP正则贪婪/懒惰匹配模式
- java实现list清除重复的字符串;arraylist动态数组;角谷定理最终得1,找出10000以内哪个数字的步骤最长
- 谈谈PHP闭包(Closure)的使用
- 链栈
- IOS常见的错误大全
- OSG中setViewMatrix和setViewMatrixAsLookAt函数
- PHP正则-贪婪匹配(最大匹配) 和最小匹配的问题。
- Silverlight依赖属性
- 了解php中die(),exit(),return的区别
- 求某范围的所有含1 这个数字的数并存盘保存。
- JSP标签c:forEach报错(二)
- vdr使用linux nfs作为存储
- PHP array_combine() 函数,合并两个数组来创建一个新数组
- Rational Rose 之 计算机丢失suite objects.dll
- C# List的一些LINQ用法