@eternalfire

Как из html-строки извлечь текстовое содержимое тегов?

Есть строка:

<b>asdad</b><b>sdfsf</b><b>xcvx</b>

Надо получить:

[
  'asdad',
  'sdfsf',
  'xcvx'
]
  • Вопрос задан
  • 142 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Регулярные выражения
preg_match_all('~<.+?>(.*?)<\/.+?>~', $str, $matches);
$result = $matches[1];

или, без регулярных выражений:

function getTexts($domNode) {
  $result = [];

  foreach ($domNode->childNodes as $n) {
    if ($n->nodeType === XML_TEXT_NODE) {
      $result[] = $n->nodeValue;
    } else if ($n->nodeType === XML_ELEMENT_NODE) {
      array_push($result, ...getTexts($n));
    }
  }

  return $result;
}

$doc = new DOMDocument();
$doc->loadHTML($str);
$result = getTexts($doc);

или, тоже без регулярных выражений:

$doc = new DOMDocument();
$doc->loadHTML($str);
$result = [];

foreach ((new DOMXPath($doc))->query('//text()') as $n) {
  $result[] = $n->nodeValue;
}
Ответ написан
Комментировать
@micronull
https://regex101.com/r/w9ty7f/1
/<[^>]+>(.*?)<\/[^>]+>/g
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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