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”>里面,方法也很简单,将(.+)换成([^<>]+),即可。也就是说,这个匹配不包含下一个出现& lt;>的地方,从而将匹配限定在同一个html标签内
做到以上几点,就可以完全无视html标签嵌套不嵌套的问题