2013-03-15 46 views
0

對不起,我英語不好。我現在要發佈我的代碼:替換字符串之前的字符串?

$image = 'http://example.com/thisisimage.gif'; 
    $filename = substr($image, strrpos($image, '/') + 1); 
    echo '<br>'; 
    echo $filename; 
    echo '<br>';    
    echo preg_replace('/^[^\/]+/', 'http://mydomain.com', $image); 
    echo '<br>';  

$ image is string;

$ filename是圖像的名稱(例如上面,它返回「thisisimage.gif」)

現在我想用「http://mydomain.com」 $文件名之前全部更換,我的代碼是以上,但它不工作。

謝謝!

+0

要變成//example.com/thisisimage.gif到//localhost/thisisimage.gif嗎?真的,我不明白你在問什麼。 – Ihsan 2013-03-15 09:35:03

+0

@Ihsan:是的!我編輯過,是'http://mydomain.com'。 – 2013-03-15 09:37:12

+0

然後,你已經完成了艱難的一部分。請看下面的答案。 – Ihsan 2013-03-15 09:43:24

回答

2
$foo = explode($filename, $image); 
echo $foo[0]; 

爆炸「分裂」一個給定的參數(在你的情況下$文件名)。它返回一個數組,其中的鍵在您給出的字符串上分割。

如果你只是想改變網址。您使用str_replace函數

$foo = str_replace("http://example.com", "http://localhost", $image); 

    //This will change "http://example.com" to "http://localhost", like a text replace in notepad. 

你的情況:

$image = 'http://example.com/thisisimage.gif'; 
    $filename = substr($image, strrpos($image, '/') + 1); 
    $foo = explode($filename, $image); 
    echo '<br>'; 
    echo $filename; 
    echo '<br>';    
    echo str_replace($foo[0], "http://yourdomain.com/", $url); 
    echo '<br>'; 
+0

我認爲這是最好的解決方案。 謝謝! – 2013-03-15 10:14:41

1

試試這個:

$image = 'http://example.com/thisisimage.gif'; 
echo preg_replace('/^http:\/\/.*\.com/', 'http://mydomain.com',$image); 
2

有在你不需要正則表達式的另一種方法:

簡稱:

$image = 'http://example.com/thisisimage.gif'; 
$url = "http://mydomain.com/".basename($image); 

說明:

如果你只是想要的文件名,而不網址或目錄路徑的,basename()是你的朋友;

$image = 'http://example.com/thisisimage.gif'; 
$filename = basename($image); 

輸出:thisisimage.gif

那麼你可以添加任何你想要的域名:

$mydomain = "http://mydomain.com/"; 
$url = $mydomain.$filename; 
+1

不要忘記「/」basename()只是抓住文件名。 – 2013-03-15 09:49:50

+0

我剛剛意識到,已經改變了,謝謝!的xD – aleation 2013-03-15 09:50:16

1

其他人在這裏給了有關如何做到這一點很好的答案 - 正則表達式有它的優勢但也有缺點 - 它的速度較慢,分別需要更多的資源,對於這樣簡單的事情,我會建議你使用爆炸方法,但在爲正則表達式函數說話時,你也可以嘗試這個,而不是你的preg_replace:

echo preg_replace('#(?:.*?)/([^/]+)$#i', 'http://localhost/$1', $image); 

似乎可變長度positve lookbehind在PHP中不受支持。

1

這應該只是工作:

$image = 'http://example.com/thisisimage.gif'; 
$filename = substr($image, strrpos($image, '/') + 1); 
echo '<br>'; 
echo $filename; 
echo '<br>';    
echo 'http://mydomain.com/'.$filename; 
echo '<br>';  
1

,如果你只是想在文件名前添加自己的域名,試試這個:

$filename = array_pop(explode("/", $image)); 
echo "http://mydomain.com/" . $filename; 

,如果你想只替換thedomain,試試這個:

echo preg_replace('/.*?[^\/]\/(?!\/)/', 'http://mydomain.com/', $image);