Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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 domdocument加载带有跳过错误的HTML或正则表达式解决方案_Php_Html_Regex_Preg Replace_Preg Replace Callback - Fatal编程技术网

php domdocument加载带有跳过错误的HTML或正则表达式解决方案

php domdocument加载带有跳过错误的HTML或正则表达式解决方案,php,html,regex,preg-replace,preg-replace-callback,Php,Html,Regex,Preg Replace,Preg Replace Callback,今天早些时候,我问了一个问题,关于用return fo some函数替换html中所有链接的HREF的正则表达式解决方案 然后我删除了它,因为我似乎可以使用DomDocument处理它,但结果是,我不能 看,我的html有很多错误的html syntex、html5代码等。所以loadHTML和loadXML都不起作用 如果有人能提供带有正则表达式的解决方案来查找href并使用调用函数替换all..我尝试过preg_replace和preg_replace_回调,但我不理解$1,$2..整个概念

今天早些时候,我问了一个问题,关于用return fo some函数替换html中所有链接的HREF的正则表达式解决方案

然后我删除了它,因为我似乎可以使用DomDocument处理它,但结果是,我不能

看,我的html有很多错误的html syntex、html5代码等。所以loadHTML和loadXML都不起作用

如果有人能提供带有正则表达式的解决方案来查找href并使用调用函数替换all..我尝试过preg_replace和preg_replace_回调,但我不理解$1,$2..整个概念。。 我搜索了所有类似的问题,但它们都有DomDocumenet的答案,我无法使用

类似的老问题:

但我需要正则表达式解决方案

请尝试以下代码:

// $text - your text
// $1 - preg variable for 1st "(.*)" match
// $2 - preg variable for 2nd "(.*)" match
preg_replace('/<a(.*)href="([^"]*)"(.*)>/','<a $1 href="http://new.href" $3>',$text);
/$text-您的文本
//$1-第一个“(.*)”匹配的preg变量
//$2-第二个“(.*)”匹配的preg变量

preg_replace('/

我创建了一个..人们通常担心的主要问题是有其他属性,在href之前、之后、空格、错误的url规范、单引号或双引号中的href url等等..最大的优点是我学会了如何使用它们

$callback = function ($match) use($params){
        $data = MyClass::updateUrl($match[2], $params);
        $return_data = 'href='.$match[1].$data.$match[1];
        return $return_data;
    };
    $reg = "#href\s*=\s*(\"|')?([^\"'>]+)(\"|')#i";
    return preg_replace_callback($reg, $callback, $html);

thnx..我实现的类似解决方案..喜欢..:)