正则-贪婪匹配(最大匹配) 和最小匹配的问题。
来源:互联网 发布:js点击显示与隐藏 编辑:程序博客网 时间:2024/05/02 02:03
贪婪匹配(最大匹配) 和最小匹配的问题。
在抓取链接地址时,使用以下正则时发现,当在<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正则表达式的贪婪匹配和非贪婪匹配
- [perl]理解贪婪匹配和最小匹配之间的区别
- 正则表达式懒惰匹配,和贪婪匹配
- 正则中的“贪婪匹配”和“懒惰匹配”
- 正则表达式的【贪婪匹配】和【懒惰匹配】
- sed正则表达式最小匹配和最大匹配
- 正则表达式中贪婪匹配和非贪婪匹配
- python 正则表达式的贪婪匹配与非贪婪匹配
- 【转】正则表达式-贪婪匹配与非贪婪匹配的效率问题
- java 正则贪婪匹配
- 贪婪匹配和非贪婪匹配
- js正则难点突破--惰性匹配和贪婪匹配
- SMTP
- 纹理
- 程序员安装ubuntu10.04后还需要做的事情
- 开博寄语
- 彻底卸载MSN2009
- 正则-贪婪匹配(最大匹配) 和最小匹配的问题。
- Myeclipse 启动 xml 自动配置
- 按值传递和按引用传递
- stl vector
- 机票行程单WCF项目
- 自动生成Makefile
- 金三银四
- loading 特效
- 设计模式详解-设计模式简介