2014-04-06 52 views
0

我花了幾個小時試圖弄清楚這一點,我只是無法得到它。我只想要preg_replace只刪除錨定標記中的http://。我想這str_replace但你已經知道這並不裏面preg_replace工作:簡單的preg替換我不知道

$site = preg_replace('/<a href="(.*?)">/','<a href="mypage.php?url='. str_replace("http://", "", "$1") .'">', $site); 

我只是想要的任何錨鏈接刪除http://部分出圖像的鏈接,但不能因此它不會打破< img src =「.....」> 標籤。只有定位標記的網址。其實,如果你可以刪除http://和www。一部分也會很棒。因此http://google.comhttp://www.google.com將顯示爲google.com。謝謝。

回答

1

$1不是一個真正的變量,所以你不能使用str_replace就可以了。

試試這個:

$site = preg_replace('/<a href="http:\/\/(.*?)">/','<a href="mypage.php?url=$1">', $site); 

通過只把HTTP://在模式可以確保它不會在$1。當然,你需要在它前面加一個反斜槓來逃避/。因此,:\/\/

如果您需要此爲HTTPS以及工作,嘗試:

$site = preg_replace('/<a href="https?:\/\/(.*?)">/','<a href="mypage.php?url=$1">', $site); 

s?將允許它要麼是有或沒有。當然這會重寫鏈接https://google.commypage.php?url=google.com這可能不是你想要的(你不知道它是http還是https)

對於www。部分:

$site = preg_replace('/<a href="https?:\/\/(www\.|)(.*?)">/','<a href="mypage.php?url=$2">', $site); 
+0

哈哈,非常好的工作非常感謝。 Preg比賽本身阻止了我在編程方面的職業生涯。 – user2556976