2013-03-15 89 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);