PHP - Как удалить весь код, кроме <table>…</table>?

207
07 февраля 2018, 14:09

В PHP не силён вовсе. Знаю, что вопрос решается через preg_replace, но как точно?

Есть код:

<div class="product_photos">
    <a href="img/prod_1.jpg"><img src="img/prod_1.jpg"></a>
    <a href="img/prod_1.jpg"><img src="img/prod_1.jpg"></a>
    <a href="img/prod_1.jpg"><img src="img/prod_1.jpg"></a>
</div>
<div class="product_left">
    <table class="hars_table">
        <tr>
            <th>МОДЕЛЬ</th>
            <td>Carry 105 base</td>
        </tr>
        <tr>
            <th>Грузоподъёмность, кг</th>
            <td>500</td>
        </tr>
    </table>
</div>
<div class="product_right">
    <p>какой-то большой текст.</p>
</div>

Как должна быть написана регулярка, чтобы удалить весь код вокруг таблицы?

Answer 1

По=хорошему, надо бы html parser пользовать

$dom = new domDocument;
$dom->loadHTML($str);
$table = $dom->getElementsByTagName('table')[0];
echo $dom->saveHTML($table);
Answer 2

Убирает весь код вокруг первого найденного table:

<?php
$text = <<<'EOD'
<div class="product_photos">
    <a href="img/prod_1.jpg"><img src="img/prod_1.jpg"></a>
    <a href="img/prod_1.jpg"><img src="img/prod_1.jpg"></a>
    <a href="img/prod_1.jpg"><img src="img/prod_1.jpg"></a>
</div>
<div class="product_left">
    <table class="hars_table">
        <tr>
            <th>МОДЕЛЬ</th>
            <td>Carry 105 base</td>
        </tr>
        <tr>
            <th>Грузоподъёмность, кг</th>
            <td>500</td>
        </tr>
    </table>
</div>
<div class="product_right">
    <p>какой-то большой текст.</p>
</div>
EOD;
$matches = [];
if (preg_match('/<table(?:.*?)>(?:.*?)<\/table>/sm', $text, $matches)) {
    echo $matches[0];
}
READ ALSO
Как указать размер изображения в pchart

Как указать размер изображения в pchart

В документации pchart для drawFromJPG можно изменять только отступ картинкиА можно ли изменить размер передаваемой картинки? К примеру уменьшить...

167
Переменные переменных

Переменные переменных

У меня есть массив

202
webasyst не видит содержимое POST

webasyst не видит содержимое POST

В функции, ответственной за сохранение, в логах не пишет, что файл загружен, хотя все остальные данные на местеВ чем может быть дело?

174
Использование Regex в PHP

Использование Regex в PHP

Почему выражение <\shtml[^>]>(*?) работает на сайте https://regex101

120