У меня есть сценарий, который возвращает следующее в переменной, названной $content
<body>
<p><span class=\"c-sc\">dgdfgdf</span></p>
</body>
Я однако должен поместить все между тегом основного текста в массиве, названном соответствиями
Я делаю следующее для соответствия материалу между тегом основного текста
preg_match('/<body>(.*)<\/body>/',$content,$matches);
но массив $mathces пуст, как я мог заставить его возвращать все в теге основного текста
Вы не должны использовать регулярные выражения для анализа HTML.
Ваша конкретная проблема в этом случае необходимо добавить Dotall модификатор , чтобы точечные соответствовали новым линиям.
preg_match('/<body>(.*)<\/body>/s', $content, $matches);
Но всерьез используйте парсер HTML. Существует так много способов, что вышеуказанное регулярное выражение может сломаться.
Если по какой-то причине у вас не установлено 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;
Не пытайтесь обрабатывать 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();