2012-07-06 71 views
1

我有一個字符串,它包含網站上的多個鏈接,但我需要將它們更改爲鏈接到另一個網站。例如,http://www.site2.com/contacthttp://www.site3.com/contact將需要變成http://www.mainsite.com/contact。這裏的URL和/contact只是一個例子,實際情況是我需要找到http://的所有實例,並用新的URL替換該和下一個/之間的內容。用另一個地址替換http://www.***的所有實例

我有一種方法可以通過preg_replace()(或類似的方法,如果這樣做到最好的選擇)?

回答

1

像這樣的東西應該這樣做:

$pattern = '#(http://)([a-z0-9.-])+/+([a-z0-9.-])#i'; 
$oldurl = 'http://www.site2.com/contact'; 
$replacement = '$1www.mainsite.com/$3'; 

$newurl = preg_replace($pattern, $replacement, $oldurl); 

編輯:

$string = 'String with many URLs'; 

echo replaceUrls($string); 

function replaceUrls($string) { 
    $pattern = '#(http://)([a-z0-9.-])+/+([a-z0-9.-]|)#i'; 
    $replacement = '$1www.mainsite.com/$3'; 

    return preg_replace($pattern, $replacement, $string); 
} 
+0

謝謝@ShogunArts,但這不是那裏。 'contact'頁面只是一個例子,但我可以刪除我的猜測?另外,'$ subject'是一個字符串,而不是一個數組,雖然看着我認爲不重要的文檔?但是,這實際上並沒有取代網址。我已經複製了我需要運行替換的字符串(在此Pastebin中)(http://pastebin.com/EdZ2tFTA),以便您可以看到我正在處理的內容。謝謝。 – 2012-07-06 13:10:24

+0

只需將模式更改爲:'$ pattern ='#(http://)([a-z0-9.-])(/)#i';'我用$ replacement替換了一個錯誤,這應該是'$ replacement ='$ 1www.mainsite.com /'',並確定你可以使用'$ subject'作爲一個字符串。 – WolvDev 2012-07-06 13:33:59

+0

用函數編輯我的答案(用你的字符串進行測試,它的工作原理) – WolvDev 2012-07-06 13:39:05

0

與新的站點名稱替換正則表達式(?<=http://)(www\.site2\.com)(?=/contact)

3

更新:這個答案不反映的問題,因爲這個問題是有些誤導第一。看看Jeroens或ShogunArts.des回答

無需正則表達式

$string = str_replace(
    array('http://www.site2.com/','http://www.site3.com/'), 
    'http://www.mainsite.com/', 
    $string 
); 

str_replace()

+0

在我看來,在OP想更改**所有**網址,不知道哪個網址,所以您會擁有e使用正則表達式。 – Jeroen 2012-07-06 12:10:15

+0

@Jeroen不,它不包含:「包含_a_網站上的多個鏈接」。 – KingCrunch 2012-07-06 12:11:17

+0

@KingCrunch - Jeroen是正確的,會有幾個不同的URL,列出的只是一個例子。我編輯了我的問題以使其更清楚。謝謝。 – 2012-07-06 12:17:58

相關問題