找到最后一个字符串并替换它

时间:2018-03-17 14:32:27

标签: php

我在php中将以下链接作为字符串:

$url = 'http://www.example.com/assets/images/temp/10.jpg';

我想在数字之前加上BIG这个词,所以最后我会:

$url = 'http://www.example.com/assets/images/temp/big10.jpg';

我目前正在通过在/上使用explode然后在最后一个数组中添加big来完成此操作。我唯一的问题是,将来这个链接可能会少/,即:http://www.example.com/assets/10.jpg。在这种情况下,我的爆炸声明将不起作用。在/的最后一次出现后,是否有更好的方法来添加单词big?

我也想出了这个方法:

$url = 'http://www.example.com/assets/images/temp/10.jpg';
$filename = substr(strrchr($url, "/"), 1); // returns 10.jpg
$newfilename = 'big'.substr(strrchr($url, "/"), 1); // returns big10.jpg
$newurl = str_replace($filename,$newfilename,$url); // replaces 10.jpg with big.jpg 

3 个答案:

答案 0 :(得分:0)

Explode将始终有效。但是,如果你想要一个更简洁的方法,你可以这样做:

$url = 'http://www.example.com/assets/images/temp/10.jpg';
$newurl = substr_replace($url, "big", strrpos($url, '/') + 1, 0);

这将给出您的预期结果:http://www.example.com/assets/images/temp/big10.jpg

答案 1 :(得分:0)

根据上述问题中提到的描述作为解决方案,请尝试执行以下代码片段。

  <?php
$url         = 'http://www.example.com/assets/images/temp/10.jpg';
$fileName    = basename($url);
$newFileName = 'big' . $fileName;
$url         = str_ireplace($fileName, $newFileName, $url);
echo $url;
?>

答案 2 :(得分:0)

有很多方法可以实现你想要的东西。

对我而言,最简单的方法是使用pathinfo提取文件名,然后将您的前缀附加到basename

$prefix = 'big';
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$pathinfo = pathinfo($url);
var_dump($pathinfo['dirname'] . '/' . $prefix . $pathinfo['basename']);

结果:https://3v4l.org/3MkIG

string(51) "http://www.example.com/assets/images/temp/big10.jpg"

面向对象的方法:https://3v4l.org/aF5lf

class FileNamePrefixer extends SplFileInfo
{
    public function addPrefix($prefix)
    {
        return $this->getPathInfo() . '/' .  $prefix . $this->getBaseName();
    }
}
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$fileInfo = new FileNamePrefixer($url);
var_dump($fileInfo->addPrefix('big'));

另一种方法是使用preg_replace指定要替换的单词模式。

$prefix = 'big';
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$new_url = preg_replace('/([\w|\s|-]+)(\.\w+)$/', $prefix . '$1$2', $url);
var_dump($new_url);

模式([\w|\s|-]+)(\.\w+)$表示;在字符串的末尾,查找单词(字符:az,AZ,0-9,_,空格和 - ),后跟一个句点,后跟另一个单词和商店它们位于变量$1$2

结果:https://3v4l.org/6e8d7

string(51) "http://www.example.com/assets/images/temp/big10.jpg"

请注意,如果您的网址可选地包含片段或查询字符串,则上述preg_replace模式将无效。相反,您需要将它们视为可选项,如下所示:

$prefix = 'big';
$url = 'http://www.example.com/assets/images/temp/10.jpg?foo=bar&baz=foo#foobar';
$new_url = preg_replace('/([\w|\s|-]+)(\.\w+)(\?.+)?(#.+)?$/', $prefix . '$1$2$3$4', $url);
var_dump($new_url);

模式(\?.+)?(#.+)?表示;可选择吗?后跟任何内容,并可选择查找#后跟任何内容,并将其存储在原始模式的变量$3$4中。

结果:https://3v4l.org/uuYrO

string(74) "http://www.example.com/assets/images/temp/big10.jpg?foo=bar&baz=foo#foobar"