PHP正则表达式删除一些不需要的div
我想删除一些id为或class包含单词PHP正则表达式删除一些不需要的div,php,html,regex,Php,Html,Regex,我想删除一些id为或class包含单词comment或share(例如:,,,)的div,我使用的东西 preg_replace('/<div[^>]*(comment|share)[^>]*>(.*?)<\/div>/is', '', $htmls); 如何做正确的正则表达式 您可以这样做,然后使用查找正则表达式模式的文本 但是,您也可以将该部分与正则表达式一起使用,只需使用xpath即可。这在您的情况下更为直接。请参考此站点以测试您的正则表达式 考虑使用
comment
或share
(例如:
,
,
,
)的div,我使用的东西
preg_replace('/<div[^>]*(comment|share)[^>]*>(.*?)<\/div>/is', '', $htmls);
如何做正确的正则表达式
您可以这样做,然后使用查找正则表达式模式的文本
但是,您也可以将该部分与正则表达式一起使用,只需使用xpath即可。这在您的情况下更为直接。请参考此站点以测试您的正则表达式
考虑使用函数来解析HTML,然后针对您不想要的
div
并删除它。这将更快、更易于理解和维护,并且可能更快地编写。我认为您应该使用的是DomDocument
尝试:
$dom = new DOMDocument();
$dom->loadHTML($htmls);
$remove = array("comment","share");
$removeList = array();
foreach ( $dom->getElementsByTagName("div") as $div ) {
if (in_array($div->getAttribute("class"), $remove) || in_array($div->getAttribute("id"), $remove)) {
$removeList[] = $div;
}
}
foreach ( $removeList as $div ) {
$div->parentNode->removeChild($div);
}
$dom->formatOutput = true;
echo "<pre>";
echo htmlentities($dom->saveHTML());
$dom=newdomdocument();
$dom->loadHTML($htmls);
$remove=数组(“注释”、“共享”);
$removeList=array();
foreach($dom->getElementsByTagName(“div”)作为$div){
if(在_数组中($div->getAttribute(“class”),$remove)|在_数组中($div->getAttribute(“id”),$remove)){
$removeList[]=$div;
}
}
foreach($removelistas$div){
$div->parentNode->removeChild($div);
}
$dom->formatOutput=true;
回声“;
echo htmlentities($dom->saveHTML());
每当你试图用正则表达式解析HTML时,一只小海豹就会被杀死。HTML不是一种常规语言,因此很难用正则表达式来解析它。所以如果一些div像:div.header-comment
,div.social-share
,我应该把它们都列在$remove=array(“comment”,“share”,“header comment”,“social share”)代码>?在一个数组中列出所有内容太累了。是否可以使用strpos
来代替数组中的?如果在id或类中查找注释
或共享
,是否删除div?
$dom = new DOMDocument();
$dom->loadHTML($htmls);
$remove = array("comment","share");
$removeList = array();
foreach ( $dom->getElementsByTagName("div") as $div ) {
if (in_array($div->getAttribute("class"), $remove) || in_array($div->getAttribute("id"), $remove)) {
$removeList[] = $div;
}
}
foreach ( $removeList as $div ) {
$div->parentNode->removeChild($div);
}
$dom->formatOutput = true;
echo "<pre>";
echo htmlentities($dom->saveHTML());