我有一个问题,我怎么能只匹配http://,https://
。
这是我的正则表达式现在它选择所有链接并替换为我的完整网址。
但问题是我的$string
获得了正确的网址,但替换功能总是将其替换为http://example.comhttp://google.com/test
$string = 'test <a href="/web/data.html">link1</a> <a href="http://google.com/test">link2</a>';
$pattern = "/<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU";
$response = preg_replace_callback($pattern, function ($matches) {
return '<a href="http://example.com'.$matches[2].'">'.$matches[3].'</a>';
}, $string);
var_dump($response);
现在的结果是:
test <a href="http://example.com/web/data.html">link1</a> <a href="http://example.comhttp://google.com/test">link2</a>
预期结果是:
test <a href="http://example.com/web/data.html">link1</a> <a href="http://google.com/test">link2</a>
感谢。
答案 0 :(得分:1)
您可以使用更简单的方法使用这样的正则表达式:
href="/
替换字符串:
href="http://example.com/
<强> Working demo 强>
Php代码
$re = '~href="/~';
$str = "test <a href=\"/web/data.html\">link1</a> <a href=\"http://google.com/test\">link2</a>\n\n";
$subst = "href=\"http://example.com/";
$result = preg_replace($re, $subst, $str);
// output
test <a href="http://example.com/web/data.html">link1</a> <a href="http://google.com/test">link2</a>