2011-04-18 23 views
3

我需要一個URL是這樣的:正則表達式最適合這個問題嗎?

https://www.domain.com/m/281/[imagename].jpg

,並把它變成這樣:

http://www.NEWdomain.com/images/[imagename].jpg

我需要做這多個網址,所以我想編寫一個快速的PHP腳本將網址放入數組中,然後循環更改域名並刪除原始URL中的文件結構。不是所有的原始網址都是/m/281有些稍有不同。

我想我可以做的https://www.domain.comhttp://www.NEWdomain.com一個str_replace,但我與如何在url中的變化/m/281/更改我的文件結構像/images/難倒。

正則表達式最好解決這個問題嗎?

+0

兩個應該影響'正確'解決方案的問題:1.當你說/ m/281 /變化時,你的意思是它總是一個字母后跟三個數字,用斜槓分隔?或者這種結構本身是否改變? 2.它是一次性腳本還是需要連續運行的東西? – 2011-04-18 01:11:27

回答

1

如果你想改變所有路徑的所有圖像URL,這個測試函數應該做的伎倆。

function fixurls($text) { 
    $re = '% # Match image urls in domain.com 
     https://www\.domain\.com/ # Required domain. 
     (?:[^\s/]+/)*    # Optional pathname. 
     ([^\s/]+\.jpe?g|png|gif) # $1: Filename (images only) 
     \b      # Anchor to word boundary. 
     %xim'; 
    // Fix all image URLs in $text string. 
    $replace = 'http://www.NEWdomain.com/images/$1'; 
    $text = preg_replace($re, $replace, $text); 
    return $text; 
} 

如果您只希望從特定路徑更改圖像,則可以輕鬆修改正則表達式的路徑部分。

+0

非常感謝!我相信其他建議也會起作用。但這很快就解決了我的問題......非常感謝。我將不得不現在保存以備將來使用。 – Joe 2011-04-18 02:41:55

0

你的正則表達式可以匹配/[a-zA-Z]/[0-9]*/,如果我沒有讓你的舊格局一個壞的假設。

2

你爲什麼不嘗試使用一些URL解析庫一樣 - parse_url

,然後讓每個部件,並做簡單的字符串替換可能。

0

我認爲你需要的是preg_replace()

3

你可以嘗試這樣的:

  1. 脫光 「https://開頭」
  2. 做str_replace()函數爲你 說
  3. 分割字符串到一個數組的基於域的「/」上的 。 explode("/", $urlString);
  4. 循環並移除URL元素之後的所有元素 而不是最後一個 。

結果將是:

$arr[0] = www.NEWdomain.com 
$arr[1] = [imagename].jpg 

那麼剛剛過去的元素之前 「圖像」 插入

結果將爲:

$arr[0] = www.NEWdomain.com 
$arr[1] = images 
$arr[2] = [imagename].jpg 

終於破滅回一個字符串:

$blah = implode("/", $arr); 
0

如果只有前兩個子目錄段是可變的,你可以嘗試:

$src = preg_replace(
    "~https?://www.domain.com/\w+/\d+/(.*?\.jpg)~" // match regex 
    "http://www.NEWdomain.com/images/$1",   // replacement 
    $src); 

\w意味着一個字母,\d+比賽小數。 .*?幾乎可以處理任何事情,因爲你沒有給出任何文件名的標準。

在替換字符串中,$1正好成爲先前與(捕獲) parens匹配的內容。