日期:2014-05-16  浏览次数:20390 次

求一段正则表达式!
<ul id="a">
<li style="display:none">xxx</li>
<li style="display:block">xxx</li>
<li>xxx</li>
</ul>
<ul id="b">
<li style="display:none">xxx</li>
<li style="display:block">xxx</li>
<li>xxx</li>
</ul>

我想正则取得ID为b的UL里的每一个li里的内容,正则应该怎么写?

/<ul id="b">.*?<li.*?>(.*?)<\/li>.*?<\/ul>/is  只能匹配到第一个li里的内容
------解决方案--------------------
$s=<<<html
<ul id="a">
<li style="display:none">xxx</li>
<li style="display:block">xxx</li>
<li>xxx</li>
</ul>
<ul id="b">
<li style="display:none">xxx</li>
<li style="display:block">xxx</li>
<li>xxx</li>
</ul>
html;

preg_match('#<ul id="b">(.+)</ul>#is',$s,$m);
preg_match_all('#<li[^>]*>(.+)</li>#isU',$m[1],$arr);
print_r($arr[1]);

------解决方案--------------------
(?<=<ul id="b">(?:\s*<li.*?>.*?<\/li>\s*)*)\s*<li.*?>(.*?)<\/li>\s*  给你个参考,你自己根据需求再修改下