получение всех значений от тегов h1 с помощью php

Я хочу получить массив, который содержит все значения тега h1 из текста

Пример, если это, где данная входная строка:

<h1>hello</h1>
<p>random text</p>
<h1>title number two!</h1>

Я должен получить массив, содержащий это:

titles[0] = 'hello',
titles[1] = 'title number two!'

Я уже выяснил, как получить первое h1 значение строки, но мне нужны все значения всех тегов h1 в данной строке.

Я в настоящее время использую это для получения первого тега:

function getTextBetweenTags($string, $tagname) 
 {
  $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
  preg_match($pattern, $string, $matches);
  return $matches[1];
 }

Я передаю его строка, я хочу быть проанализированным и как $tagname, я вставил "h1". Я не записал это сам, хотя, я пытался отредактировать код, чтобы сделать то, к чему я хочу это, но ничто действительно не работает.

Я надеялся, что кто-то мог выручить меня.

Заранее спасибо.

14
задан Pieter888 21 July 2010 в 12:14
поделиться

4 ответа

вы могли бы использовать simplehtmldom :

function getTextBetweenTags($string, $tagname) {
    // Create DOM from string
    $html = str_get_html($string);

    $titles = array();
    // Find all tags 
    foreach($html->find($tagname) as $element) {
        $titles[] = $element->plaintext;
    }
}
32
ответ дан 1 December 2019 в 05:55
поделиться
function getTextBetweenTags($string, $tagname){
    $d = new DOMDocument();
    $d->loadHTML($string);
    $return = array();
    foreach($d->getElementsByTagName($tagname) as $item){
        $return[] = $item->textContent;
    }
    return $return;
}
22
ответ дан 1 December 2019 в 05:55
поделиться

Альтернатива DOM. Используйте, когда проблема с памятью.

$html = <<< HTML
<html>
<h1>hello<span>world</span></h1>
<p>random text</p>
<h1>title number two!</h1>
</html>
HTML;

$reader = new XMLReader;
$reader->xml($html);
while($reader->read() !== FALSE) {
    if($reader->name === 'h1' && $reader->nodeType === XMLReader::ELEMENT) {
        echo $reader->readString();
    }
}
8
ответ дан 1 December 2019 в 05:55
поделиться
 function getTextBetweenH1($string)
 {
    $pattern = "/<h1>(.*?)<\/h1>/";
    preg_match_all($pattern, $string, $matches);
    return ($matches[1]);
 }
3
ответ дан 1 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

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