首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

请问正则必须包含怎么匹配呢

2013-11-15 
请教正则必须包含如何匹配呢正则:a(.*)href[\\](.*)[\\]div class\plst\b(.*)/b/div/a

请教正则必须包含如何匹配呢
正则:
<a(.*)href=["\'](.*)["\']><div class="plst"><b>(.*)</b></div></a>

内容:
<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>

目标:(必须包含<div class="plst"><b>)
<a href="/BAMC"><div class="plst"><b>标题二</b></div></a>


当前错误结果:(匹配成了整段了)
<a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>
[解决办法]
加上 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>";
print_r($match);

[解决办法]
给个提醒
匹配一些有边界的内容,应以 边界+排除边界+边界 这样的形式写正则,避免随意地用圆点
尤其是html等标记语言,因为标记语言的特性就是标记,中间含有换行也是合法的,圆点不能涵盖,随便用圆点就有点想当然认为源字串一定工整了
举个极端例子如:
<a
 href="
abc/abc.html">
ABC
</a>
这段html字串完全合法,一点都不影响网页的显示,但正则就要想好了

"[^"]*"
<[^>]+>
<a ……>[^<]*</a>

[解决办法]
$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>

热点排行