2015-10-19 40 views
-1

我有,我怎麼只能無http://,https://匹配的問題。PHP的正則表達式匹配唯一沒有的http://,https://開頭

這是我的正則表達式現在選擇所有鏈接,並與我的完整URL取代。

但問題是,當我$string得到了正確的URL,但替換功能送花兒給人以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

您可以使用一個簡單的方法以這樣的正則表達式:

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> 
相關問題