php正则表达式只匹配无http://,https://

时间:2015-10-19 17:10:53

标签: php regex

我有一个问题,我怎么能只匹配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>

感谢。

1 个答案:

答案 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>