2010-12-08 39 views
2

我试图用PHP解析一些HTML作为练习,将它作为文本输出,并且我遇到了一个障碍。我想删除所有使用style="display: none;"隐藏的标签 - 请注意标签可能包含其他属性和样式属性。正则表达式用于选择性剥离HTML

我到目前为止的代码是这样的:

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

它返回NULLPREG_BACKTRACK_LIMIT_ERROR的代码。
我尝试这样做,而不是:

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

但现在它只是不更换任何标签。

任何帮助将不胜感激。谢谢!

+3

刚。别。的http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-12-08 22:47:23

+0

可能重复【如何分析和处理PHP程序HTML?](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