0

正規表現とphpでの文字列の操作についての私の理解はせいぜい貧弱なので、これがほとんどの人にとって単純な質問である場合はお詫びします。私が行った検索が何よりも私を混乱させたのは正直なところ、ここの誰かが私に明確な答えを与えてくれることを願っています。

PHPでファイル名のサフィックスをインクリメントする必要があります。

ファイル名は次のようになります。

13132432343243432434234_1.jpg

ファイル名をそのままにしておきたいのですが、最後の「_1」の部分を「_2」、「_3」、「_4」などに置き換えます。

ファイルが存在するかどうかを確認する必要はありません。これは単純な文字列操作である必要があります。接尾辞が_1の場合は、_2に置き換え、接尾辞が_4の場合は、_5などに置き換えます。

前もって感謝します。

4

3 に答える 3

5

Something along these lines should do it:

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

The regex matches "any number preceded by a _ and followed by a .", the callback returns this number incremented by one.

于 2012-06-18T09:42:49.293 に答える
1

You can do it without regex as well, using simple string functions:

$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 に答える