我想接收一个包含文本中所有 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”中。虽然我不是自己写的,但我一直在尝试编辑代码来做我想做的事,但没有任何效果。
你可以使用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; } }
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(); } }