1

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

然后我删除了它,因为我似乎可以使用 DomDocument 解决它,但事实证明,我不能......

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

请如果有人可以使用正则表达式提供解决方案来查找href并使用调用所有函数来替换..我已经尝试过preg_replace和preg_replace_callback,但我无法理解$ 1,$ 2 ..整个概念..我'我搜索了所有类似的问题,但他们都有 DomDocumenet 的答案,我无法使用..

旧的类似问题: 抓取 A 元素的 href 属性

查找页面中的所有href并替换为维护先前链接的链接 - PHP

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

4

2 回答 2

1

试试这个代码:

// $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);

我在这里粘贴工作示例:http: //codepad.org/KORtcb9q

于 2012-09-06T14:11:21.193 回答
1

我创建了一个..通常人们害怕的主要问题是有其他属性,在href之前,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);
于 2012-09-06T15:46:35.070 回答