0

我对正则表达式和在 php 中使用字符串的理解充其量是很差的,所以如果这对大多数人来说是一个简单的问题,我很抱歉。老实说,我所做的搜索比其他任何事情都让我感到困惑,希望这里有人能给我一个明确的答案。

我只需要在 PHP 中增加文件名的后缀。

文件名如下所示:

13132432343243432434234_1.jpg

我希望保持文件名原样,但用 '_2'、'_3'、'_4' 等替换最后的 '_1' 部分。

不需要检查文件是否存在,这需要一个简单的字符串操作。如果后缀为_1,则将其替换为_2,如果后缀为_4,则将其替换为_5,依此类推。

提前致谢。

4

3 回答 3

5

沿着这些路线的东西应该这样做:

echo preg_replace_callback('/(?<=_)\d+(?=\.)/',
                           function ($m) { return ++$m[0]; },
                           '13132432343243432434234_1.jpg');

正则表达式匹配“前面有 a_后面有 a的任何数字.,回调返回这个数字加一。

于 2012-06-18T09:42:49.293 回答
1

您也可以不使用正则表达式,使用简单的字符串函数:

$filename = '13132432343243432434234_1.jpg';

// Splits into '13132432343243432434234_1' and '.jpg'
list($name, $ext) = explode('.', $filename);

// Splits into '13132432343243432434234' and '1'
list($basename, $index) = explode('_', $name);

$index++; // increment the index

$filename = $basename . '_' . $index . '.' . $ext;
于 2012-06-18T09:42:28.030 回答
1

这应该可以完成这项工作。

<?php

$file = "13132432343243432434234_1.jpg"; // old filename

list ($fn,$ext) = preg_split("/\./",$file); // split name and extension

print_r(array($fn,$ext));

list($pre,$suffix) = preg_split("/_/",$fn); // split prefix and suffix

print_r(array($pre,$suffix));

$suffix++; // increment  by 1

$file = $pre . "_" . $suffix . $ext; // regroup

echo "NEW FILENAME: " . $file; // new filename

?>
于 2012-06-18T09:52:51.097 回答