Стрип-теги и все между ними

Как я могу разделить <h1>including this content</h1>

Я знаю, что вы можете использовать стрип-теги для удаления тегов, но я хочу, чтобы все между ними прошло.

Любая помощь будет оценена по достоинству.

Ответ 1

Как вы работаете с HTML, вы должны использовать парсер HTML для правильной обработки. Вы можете использовать PHP DOMDocument и запрашивать элементы с помощью DOMXPath, например:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//h1') as $node) {
    $node->parentNode->removeChild($node);
}
$html = $doc->saveHTML();

Ответ 2

Попробуйте следующее:

preg_replace('/<h1[^>]*>([\s\S]*?)<\/h1[^>]*>/', '', '<h1>including this content</h1>');

Пример:

echo preg_replace('/<h1[^>]*>([\s\S]*?)<\/h1[^>]*>/', '', 'Hello<h1>including this content</h1> There !!');

Вывод:

Hello There

Ответ 3

Если вы хотите удалить ВСЕ теги и включая контент:

$yourString = 'Hello <div>Planet</div> Earth. This is some <span class="foo">sample</span> content!';
$regex = '/<[^>]*>[^<]*<[^>]*>/';
echo preg_replace($regex, '', $yourString);
#=> Hello  Earth. This is some  content!

HTML-атрибуты могут содержать < или >. Итак, если ваш HTML слишком запутан, этот метод не будет работать, и вам понадобится парсер DOM.


Пояснение по регулярному выражению

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  <                        '<'
--------------------------------------------------------------------------------
  [^>]*                    any character except: '>' (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  >                        '>'
--------------------------------------------------------------------------------
  [^<]*                    any character except: '<' (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  <                        '<'
--------------------------------------------------------------------------------
  [^>]*                    any character except: '>' (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  >                        '>'

Ответ 4

Вы можете использовать таблицу стилей XSLT и сопоставлять все теги себе, за исключением тега h1, который будет сопоставлен с пустой строкой, а затем применить его к вашему документу. Возможно, это слишком тяжело для того, чтобы делать что-то столь же простое, как это.

Ответ 5

Вы также используете strip_tags для удаления тегов, а также все между ними.

$html содержат html или php, где вы хотите удалить теги.

strip_tags ($ HTML, "");

Попробуйте это, я думаю, что это сработает для вас.