正则:
内容:
加上 U,禁止贪婪
是这个意思吗
$str = '<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>';preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/is",$str,$match);echo "<pre class="brush:php;toolbar:false">";print_r($match);
是这个意思吗
$str = '<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>';preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/is",$str,$match);echo "<pre class="brush:php;toolbar:false">";print_r($match);
preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/isU",$str,$match);//加上U,禁止贪婪模式
preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/isU",$str,$match);//加上U,禁止贪婪模式
加上 U,禁止贪婪
好象不是贪婪的问题,因为他在匹配到结果就立即结束了。
加了U
$str = '<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>';preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/U",$str,$match);echo "<pre class="brush:php;toolbar:false">";print_r($match);
<pre class="brush:php;toolbar:false">Array( [0] => Array ( [0] => <a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a> ) [1] => Array ( [0] => 标题二 ))
preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/isU",$str,$match);//加上U,禁止贪婪模式
Array( [0] => Array ( [0] => <a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a> ) [1] => Array ( [0] => 标题二 ))
给个提醒
匹配一些有边界的内容,应以 边界+ 排除边界+ 边界 这样的形式写正则,避免随意地用圆点
尤其是html等标记语言,因为标记语言的特性就是标记,中间含有换行也是合法的,圆点不能涵盖,随便用圆点就有点想当然认为源字串一定工整了
举个极端例子如:
href="
abc/abc.html">
ABC
这段html字串完全合法,一点都不影响网页的显示,但正则就要想好了
"[^"]*"
<[^>]+>
[^<]*
$s =<<< TXT<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>TXT;preg_match('/.+(<a.+?<div class="plst".+?a>)/is', $s, $m);echo $m[1];
<a href="/BAMC"><div class="plst"><b>标题二</b></div></a>
再简化一下
preg_match('/.+()/is', $s, $m);echo $m[1];/*<a href="/BAMC"><div class="plst"><b>标题二</b></div></a>*/