【问题标题】:regex find specific tables in html正则表达式在 html 中查找特定表
【发布时间】:2019-01-15 02:19:50
【问题描述】:

我有像底部这样的 html。并使用 PHP

<table style="...">
<tbody>
<tr> <img id="foo" src="foo"/></tr>
</tbody>
</table>
<p> ....</p>
<table style="...">
<tbody>
<tr> <img id="bar" src="bar"/></tr
</tbody>
</table>

我开始使用 PHP。 我想找到特定的表,如 img src 或 id 等于 foobar。 但选择了两个表。 这是我的正则表达式 1.find表有img标签

    /<table.*?>.*?<img *.*?<\/table>/

-> 选择了 2 个表

2.添加img src

<table.*?<img.+(src=.*?foo).*?<\/table>

-> 全部选中,从第一个标签到最后一个标签

3.所以尽量不要在...标签之间包含&lt;/table&gt;

<table.*?(?!<\/table>).*?<img.+(src=.*?foo).*?<\/table>

-> 相同的结果 我不知道怎么了! 我使用 preg_match_all() 解决了,但仍然想知道 preg_match() 有什么想法吗??

谢谢!

【问题讨论】:

    标签: php regex


    【解决方案1】:

    这项工作更适合使用 PHP DOMDocumentDOMXPath 类。在这种情况下,我们使用 xpath 来搜索 table,它的后代是 img,其 src 属性等于 'foo''bar'

    $doc = new DOMDocument();
    $doc->loadHTML($html);
    $xpath = new DOMXPath($doc);
    $footable = $xpath->query("//table[descendant::img[@src='foo']]");
    echo $footable->item(0)->C14N() . "\n";
    $bartable = $xpath->query("//table[descendant::img[@src='bar']]");
    echo $bartable->item(0)->C14N() . "\n";
    

    输出:

    <table style="..."><tbody><tr><img id="foo" src="foo"></img></tr></tbody></table>
    <table style="..."><tbody><tr><img id="bar" src="bar"></img></tr></tbody></table>
    

    Demo on 3v4l.org

    【讨论】:

    • 我认为 $footable->C14N() 可以在 php7 中使用。我使用 php 5.4 所以在我的情况下尝试 $footable->item(index)->C14N();
    • @SeonsooPark 对此感到抱歉 - 我一直忘记并不是每个人都使用 PHP7。我已经更新了我的答案和演示链接,其中的代码也适用于旧版本。
    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2013-11-10
    • 2022-07-14
    • 2020-12-04
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多