Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式删除一些不需要的div_Php_Html_Regex - Fatal编程技术网

PHP正则表达式删除一些不需要的div

PHP正则表达式删除一些不需要的div,php,html,regex,Php,Html,Regex,我想删除一些id为或class包含单词comment或share(例如:,,,)的div,我使用的东西 preg_replace('/<div[^>]*(comment|share)[^>]*>(.*?)<\/div>/is', '', $htmls); 如何做正确的正则表达式 您可以这样做,然后使用查找正则表达式模式的文本 但是,您也可以将该部分与正则表达式一起使用,只需使用xpath即可。这在您的情况下更为直接。请参考此站点以测试您的正则表达式 考虑使用

我想删除一些id为或class包含单词
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());