2010-12-08 3 views
2

Я пытаюсь проанализировать некоторый HTML с PHP как упражнение, выводя его как только текст, и я попал в ловушку. Я хотел бы удалить любые теги, которые скрыты с style="display: none;" - учитывая, что тег может содержать другие атрибуты и свойства стиля.Regex для выборочной зачистки HTML

код у меня до сих пор это:

$page = preg_replace("#<([a-z]+).*?style=\".*?display:\s*none[^>]*>.*?</\1>#s","",$page);` 

код он возвращался NULL с PREG_BACKTRACK_LIMIT_ERROR.
Я попытался это вместо:

$page = preg_replace("#<([a-z]+)[^>]*?style=\"[^\"]*?display:\s*none[^>]*>.*?</\1>#s","",$page); 

Но теперь это просто не заменяет какие-либо метки.

Любая помощь будет высоко оценена. Благодаря!

+3

Just. Не. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-12-08 22:47:23

+0

Возможный дубликат [Как разобрать и обработать HTML с PHP?] (http : //stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php) – PeeHaa 2012-01-16 20:01:18

ответ

2

Используя DOMDocument, вы можете попробовать что-то вроде этого:

$doc = new DOMDocument; 
$doc->loadHTMLFile("foo.html"); 
$nodeList = $doc->getElementsByTagName('*'); 
foreach($nodeList as $node) { 
    if(strpos(strtolower($node->getAttribute('style')), 'display: none') !== false) { 
     $doc->removeChild($node); 
    } 
} 
$doc->saveHTMLFile("foo.html"); 
2

Вы никогда не должны анализировать HTML с помощью регулярного выражения. Это заставляет ваши глаза кровоточить. HTML не обычный в любой форме. Он должен анализироваться с помощью DOM-парсера.

Parse HTML to DOM with PHP

Смежные вопросы