регулярное выражение найти конкретные таблицы в HTML - PullRequest
0 голосов
/ 15 января 2019

У меня есть 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, равную foo или bar. но выбрал обе таблицы. вот мое регулярное выражение В таблицах 1.find есть тег img

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

-> выбрано 2 стола

2.add img src

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

-> выделено все, от первого тега до последнего тега

3.так попробуйте не включать </table> между тегами ...

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

-> тот же результат Я не знаю, что не так! Я был решен с помощью preg_match_all (), но все еще хочу знать preg_match () есть идеи ??

спасибо!

1 Ответ

0 голосов
/ 15 января 2019

Эта работа гораздо лучше подходит для использования классов PHPs DOMDocument и DOMXPath. В этом случае мы используем 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>

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...