PHP Regular Express для удаления тегов <h1> (и их содержимого) - PullRequest
3 голосов
/ 26 мая 2010

Слушай, я не могу найти ни одного регулярного выражения в Интернете, чтобы удалить

<h1></h1>

теги (и их содержимое).

Кто-нибудь протянуть руку помощи и помочь.

Ответы [ 6 ]

6 голосов
/ 26 мая 2010

Не используйте регулярные выражения, используйте такой инструмент, как PHP Simple HTML DOM .

// Construct dom from string
$dom = str_get_html($html);

// ...or construct dom from file/url
$dom = file_get_html($path);

// strip h1 tags (and their content)
foreach ($dom->find('h1') as $node) {
    $node->outertext = '';
}
4 голосов
/ 26 мая 2010

Вы также можете использовать Модуль расширения PHP DOM :

$domDocument = new DOMDocument;
$domDocument->loadHTMLFile('http://example.com');
$domNodeList = $domDocument->getElementsByTagname('h1');
$domElemsToRemove = array();
foreach ($domNodeList as $domElement) {
    $domElemsToRemove[] = $domElement;
}
foreach($domElemsToRemove as $domElement) {
    $domElement->parentNode->removeChild($domElement);
}
var_dump($domDocument->saveHTML());
4 голосов
/ 26 мая 2010

Вы не можете найти его, потому что его нет.

Регулярные выражения не подходят для этой задачи, поскольку теги <h1> могут быть вложены сколь угодно глубоко. (Правка: Томалак указал, что им не позволено, но реальность - зло). Попробуйте вместо этого анализатор HTML.

Выражение Turbod будет работать, если вы можете быть уверены, что нигде в вашем документе не может быть такая конструкция, как <h1>Foo <h1> Bar</h1></h1>.

Edit: В зависимости от вашего сценария стиль CSS, такой как h1 { display: none !important; }, может сработать.

4 голосов
/ 26 мая 2010
preg_replace('@<h1[^>]*?>.*?<\/h1>@si', '', $htmlsource);
1 голос
/ 26 мая 2010

Почему бы не использовать strip_tags ?

0 голосов
/ 08 апреля 2015

, если вы хотите использовать регулярное выражение, это работает для меня:

$str = preg_replace("/<h1>.*?<\/h1>/si", '', $str);

Знак вопроса переключает содержимое между тегами, чтобы они не были жадными. Это необходимо для случая, когда у вас есть несколько тегов h1, поэтому он всегда будет переносить содержимое между каждым из них, а не удалять все между первым открытием [h1] и последним закрытием [/ h1]

Модификатор 'i' говорит, что игнорирует разницу прописных / строчных букв, а 's' говорит, что работает многострочно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...