PHP正则表达式匹配嵌套HTML标签的方法和技巧
来源:互联网 发布:淘宝账号免费注册 编辑:程序博客网 时间:2024/06/05 03:36
转载请注明出处:http://blog.csdn.NET/donglynn/article/details/35788879
正则表达式是一个非常有用的编程技能。一般来说,简单的抓取一个HTML页面的某一条信息,比如<title>标题</title>,是很容易实现的。但是,我们往往要抓取某一个列表页面里的多个重复的<div></div>块里的特定内容,并且<div></div>块还有嵌套的使用,我们抓取的则是每个重复<div></div>块里的多个信息。同时,网页源文件不同于一般的字符串,其还存在大量的回车、换行和制表符,这些都造成了匹配失败。而初学者往往无法判断到底是哪个环节出现了问题,并且看到高度技巧化的正则表达式会感到非常沮丧,从而导致放弃问题的解决。
经过笔者多日的研究,终于摸索出以下方法和技巧,欢迎大家交流指正。
请看如下注意点和步骤:
1.注意/一定要被转义成\/,否则会报错
preg_match_all() [function.preg-match-all]: Unknown modifier
2.正则表达式用单引号'和/作为开始和结束的标界,比如'/reg partten/',采用这样的写法,正则表达式里的双引号"不必转义
比如,
$partten='/<div class="goods_item"><a href="([^<>]+)" target="_blank"><img data-ks-lazyload="([^<>]+)" alt="([^<>]+)" width="" height=""\/>/';
3.需要先去除所有的换行符、制表符、回车等等,对于便于阅读的html源文件由于上述符号的存在会造成无法匹配。
$str=preg_replace("/[\t\n\r]+/","",$str);
4.我们感兴趣的匹配信息,通常是html元素中的属性的值,因此要去除<>,否则只会匹配最后一条之前的全部信息。
比如,对于$string="<div><a href=“1.jpg”></a></div><div><a href=“2.jpg”></a></div><div><a href=“3.jpg”></a></div>",
$partten='/<div><a href=“(.+)”/';的匹配结果是:1.jpg”></a></div><div><a href=“2.jpg”></a></div><div><a href=“3.jpg”></a></div>
这是因为,上述给出的正则表达式确实没有限定匹配的范围只是第一个超链接<a href=“1.jpg”></a>。
因此,要想匹配上述三个超链接的 href属性,需要将上述匹配限定在<a href=“1.jpg”>里面,方法也很简单,将(.+)换成([^<>]+),即可。也就是说,这个匹配不包含下一个出现<>的地方,从而将匹配限定在同一个html标签内
做到以上几点,就可以完全无视html标签嵌套不嵌套的问题,从而抓取到一个页面所有的div重复块中我们感兴趣的内容,下附一例。
输出结果,一共有4个子数组,第一个子数组是匹配到的所有的项,后面三个子数组是我们匹配表达式里的三个匹配项:
- PHP正则表达式匹配嵌套HTML标签的方法和技巧
- PHP正则表达式匹配嵌套HTML标签的方法和技巧
- 关于正则表达式 PHP正则表达式匹配嵌套HTML标签的方法和技巧 不定期更新关于正则内容
- 如何匹配嵌套Html标签(正则表达式)
- 使用正则表达式匹配嵌套Html标签
- 使用正则表达式匹配嵌套Html标签
- 使用正则表达式匹配嵌套Html标签
- 使用正则表达式匹配嵌套Html标签
- 正则表达式匹配嵌套标签
- 匹配 html 标签元素的正则表达式
- 正则表达式匹配Html标签
- PHP 正则匹配 HTML 标签
- 匹配所有的html标签的正则表达式、匹配所有中文的正则表达式
- 匹配所有合法的HTML标签的正则表达式
- 匹配获取HTML标签属性的正则 表达式
- 正则表达式匹配所有不包含 css 的 html 标签
- 正则表达式匹配html标签table
- 正则表达式匹配HTML单双标签
- transition过渡和animation动画
- 数据压缩原理实验4_实验报告
- Javaer 两年经历这些
- $.ajax()详解
- C#获取当前窗体的受焦控件。
- PHP正则表达式匹配嵌套HTML标签的方法和技巧
- Python探索记(13)——字典Dictionary
- tomcat性能优化
- 微信小程序实现路径规划
- C++实训 单元九--STL输入输出流
- WAV格式学习
- mysql创建远程用户并授权
- Markdown--StackEdit
- BZOJ 3119 贪心 解题报告