Лучший способ, чем использование регулярных выражений для разбора HTML, - это использование классов DOMDocument
и DOMXPath
. Вы можете загрузить HTML в документ, затем использовать XPath для поиска определенных элементов и затем обработать эти элементы. В вашем случае мы находим промежутки, включающие слово Bonkers
, сравнивая значение text
каждого узла пролета, например,
$html = '<body><div><div><span id="b"> Bonkers </span></div></div>
<div><span> no bonk</span>
<span> This is bonkers!</span>
</div></body>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$spans = $xpath->query("//span[contains(text(), 'Bonkers')]");
foreach ($spans as $span) {
echo $span->C14N();
}
Выход:
<span id="b"> Bonkers </span>
Если вы хотите сделать сравнение без учета регистра, оно немного сложнее:
$spans = $xpath->query('//span');
foreach ($spans as $span) {
if (stripos($span->textContent, 'Bonkers') !== false) {
echo $span->C14N() . "\n";
}
}
выход
<span id="b"> Bonkers </span>
<span> This is bonkers!</span>
Демонстрация на 3v4l.org