匹配特定UL之间的所有内容

时间:2013-05-26 20:28:41

标签: php html regex

我试图匹配这个特定的ul之间的所有东西,但我无法让它匹配任何东西。任何帮助将不胜感激。

HTML

<ul class="pagination_tabs" style="position: absolute; right: 14px; top: 17px;">
    <li><a title="" href="#">1</a></li>
    <li><a title="" href="#">2</a></li>
    <li><a title="" href="#">3</a></li>
    <li><a title="" href="#">4</a></li>
    <li><a title="" href="#">5</a></li>
</ul>

PHP

if (preg_match_all("#<ul class=\"pagination_tabs\".*?>(.*?)</ul>#", $id_html, $matches)) { 
    echo "Found Match";
}
else{
    echo "No Match Found";
}

3 个答案:

答案 0 :(得分:3)

将XML / HTML与正则表达式匹配是您不想做的事情。相信我。

我建议您尝试使用SimpleXMLElementDOMDocument

$doc = new DomDocument();
$doc->load('myfile.html');
$ul = $dom->documentElement->getElementById('pagination');

答案 1 :(得分:1)

快速猜测:文本中有换行符。这意味着您需要一个标记才能使.匹配换行符。它是s标志。

"abc\ndef" =~ /abc.+def/  -> no match
"abc\ndef" =~ /abc.+def/s -> match

看看this comment in the manual

但请注意不要使用正则表达式。解析HTML(或XML)应该使用这些格式的解析器来完成。

答案 2 :(得分:0)

正则表达式应该更像这样

/<ul class='pagination_tabs'.'[^>]*<\/ul>/i`

虽然,我会使用jQuery。

if($('ul.pagination_tabs li').length > 0){ alert 'Exists'; )