Соответствие всему между HTML <тело> теги с помощью PHP

У меня есть сценарий, который возвращает следующее в переменной, названной $content

<body>
<p><span class=\"c-sc\">dgdfgdf</span></p>
</body>

Я однако должен поместить все между тегом основного текста в массиве, названном соответствиями

Я делаю следующее для соответствия материалу между тегом основного текста

preg_match('/<body>(.*)<\/body>/',$content,$matches);

но массив $mathces пуст, как я мог заставить его возвращать все в теге основного текста

5
задан Charles 24 December 2012 в 21:25
поделиться

3 ответа

Вы не должны использовать регулярные выражения для анализа HTML.

Ваша конкретная проблема в этом случае необходимо добавить Dotall модификатор , чтобы точечные соответствовали новым линиям.

preg_match('/<body>(.*)<\/body>/s', $content, $matches);

Но всерьез используйте парсер HTML. Существует так много способов, что вышеуказанное регулярное выражение может сломаться.

10
ответ дан 18 December 2019 в 06:34
поделиться

Если по какой-то причине у вас не установлено Domdocument, попробуйте это

Шаг 1. Скачать Simple_html_dom

Шаг 2. Прочитайте документацию о том, как Используйте его селекторы

require_once("simple_html_dom.php");
$doc = new simple_html_dom();
$doc->load($someHtmlString);
$body = $doc->find("body")->innertext;
2
ответ дан 18 December 2019 в 06:34
поделиться

Не пытайтесь обрабатывать html регулярными выражениями ! Используйте парсер сборки PHP вместо:

$dom = new DOMDocument;
$dom->loadHTML($string);
$bodies = $dom->getElementsByTagName('body');
assert($bodies->length === 1);
$body = $bodies->item(0);
for ($i = 0; $i < $body->children->length; $i++) {
    $body->remove($body->children->item($i));
}
$string = $dom->saveHTML();
12
ответ дан 18 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: