我对正则表达式的理解以及在php中处理字符串的情况充其量很少,所以如果这对大多数人来说这是一个简单的问题我很抱歉。如果我说实话,我所做的搜索让我更加困惑,希望有人能给我一个明确的答案。
我只需要在PHP中增加文件名的后缀。
文件名如下所示:
13132432343243432434234_1.jpg
我希望保持原样的文件名,但用“_2”,“_ 3”,“_ 4”等替换最终的“_1”部分。
无需检查文件是否存在,这需要简单的字符串操作。如果后缀为_1,则将其替换为_2,如果后缀为_4,则将其替换为_5等。
提前致谢。
答案 0 :(得分:5)
这些方面应该做的事情:
echo preg_replace_callback('/(?<=_)\d+(?=\.)/',
function ($m) { return ++$m[0]; },
'13132432343243432434234_1.jpg');
正则表达式匹配&#34;任何以_
开头且后跟.
&#34; 的数字,回调返回此数字加1。
答案 1 :(得分:2)
使用简单的字符串函数,你也可以在没有正则表达式的情况下完成:
$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;
答案 2 :(得分: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
?>