今天早些时候我问了一个关于使用正则表达式解决方案来替换html中所有链接的hrefs并返回某些函数的问题。
然后我删除它,因为它似乎可以使用DomDocument解决它,但事实证明,我不能......
看到我的HTML有很多错误的html syntex,html5代码等等。所以既没有loadHTML,也没有loadXML工作..
如果有人可以提供正则表达式的解决方案来查找href并使用调用函数替换所有..我已经尝试了preg_replace和preg_replace_callback,但我无法理解$ 1,$ 2..whole概念。 。 我搜索了所有类似的问题,但他们都有DomDocumenet的答案,我无法使用..
旧的类似问题: Grabbing the href attribute of an A element
Find all hrefs in page and replace with link maintaining previous link - PHP
但我需要正则表达式解决方案
答案 0 :(得分: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
答案 1 :(得分: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);