От строки, которая содержит много HTML, как я могу извлечь весь текст из <h1><h2>etc
теги в новую переменную.
Возможно использование preg_match_all и отправка соответствий к единственной запятой разграничили переменную.
Спасибо, ребята.
Если вы действительно хотите использовать регулярные выражения, я думаю, что:
preg_match_all('/<h[0-6]>([^</h[0-6]>*)</h/i', $string, $matches);
должно работать до тех пор, пока ваши теги заголовков не будут вложены. Как говорили другие, если вы не контролируете HTML, регулярные выражения не лучший способ сделать это.
Пожалуйста, также рассмотрите нативный Domdocument
класс PHP.
Вы можете использовать $ DOMDOC-> GETELEMANYTAGNAME ('H1')
, чтобы получить ваши заголовки.
Когда вопрос заключается в том, чтобы извлечь вещи из HTML », ответ никогда не использует регулярные выражения. Вместо этого см. Обсуждение прочный, зрелый HTML-парсер для PHP .
Сначала нужно убирать HTML ($ html_str в примере) с помощью tidy:
$tidy_config = array(
"indent" => true,
"output-xml" => true,
"output-xhtml" => false,
"drop-empty-paras" => false,
"hide-comments" => true,
"numeric-entities" => true,
"doctype" => "omit",
"char-encoding" => "utf8",
"repeated-attributes" => "keep-last"
);
$xml_str = tidy_repair_string($html_str, $tidy_config);
, тогда вы можете загрузить XML ($ XML_STR) в Domdocument:
$doc = DOMDocument::loadXML($xml_str);
и, наконец, Вы можете использовать метод Horia Dragomir:
$list = $doc->getElementsByTagName("h1");
for ($i = 0; $i < $list->length; $i++) {
print($list->item($i)->nodeValue . "<br/>\n");
}
или вы также можете использовать XPath для более сложных запросов на Domdocument (см. http://www.php.net/manual/en/class.domxpath.php )
$xpath = new DOMXPath($doc);
$list = $xpath->evaluate("//h1");
Рекомендуется не использовать регекс для этого задания и использовать что-то SimpleHTMLDOM parser
Вы, вероятно, лучше используете анализатор HTML. Но для действительно простых сценариев, что-то вроде этого может сделать:
if (preg_match_all('/<h\d>([^<]*)<\/h\d>/iU', $str, $matches)) {
// $matches contains all instances of h1-h6
}