我正在尝试仅搜索没有www
的{{1}},或http://google.com
等的链接。然后我想将https://facebook.com
添加到同一链接,以便它成为www
,或http://www.google.com
等
但是,我的模式存在问题(我以前使用或不使用www获取所有链接的模式)。
https://www.facebook.com
答案 0 :(得分:2)
我会考虑使用 DOM 和 XPath 来为您处理此问题。
$doc = new DOMDocument;
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[not(contains(@href, "www."))]/@href');
foreach ($links as $link) {
// process yours urls by $link->nodeValue
...
...
}
然后,您可以在处理网址时使用parse_url()
进行替换。
答案 1 :(得分:0)
以下是<a\\s[^>]*href=([\"']?)(?>https?|ftps?):\/\/(?![^'\">]*www[^\"]+?\\1)([^'\">]+?)\\1[^>]*>(.*?)<\\/a>
正则表达式的示例代码,仅匹配其中没有www
的href属性中的那些网址。
$re = "/<a\\s[^>]*href=([\"']?)(?>https?|ftps?):\/\/(?![^'\">]*www[^\"]+?\\1)([^'\">]+?)\\1[^>]*>(.*?)<\\/a>/";
$str = "<a href=\"http://google.com\">google</a> bla bla bla <a href=\"https://www.google.com\">google</a> bla bla bla <a href=\"http://facebook.com\">facebook</a>\n";
print ($str . "\n");
$str = preg_replace_callback(
$re,
function ($matches) {
return str_replace($matches[2], "www." . $matches[2], $matches[0]);
},
$str
);
print ($str);
输出:
<a href="http://www.google.com">google</a> bla bla bla <a href="https://www.google.com">google</a> bla bla bla <a href="http://www.facebook.com">facebook</a>