1

ディレクトリに多数の画像ファイルがあり、その内容に関するいくつかの説明の間に ID があります。

これはそのディレクトリ内のファイルの例です: de-te-mo-01-19-1084 moldura.JPG, ce-ld-ns-02-40-0453 senal.JPG, dp-bs-gu-01-43 -1597-guante.JPG, am-ca-tw-04-30-2436 Tweter.JPG, am-ma-ac-02-26-0745 aceite.JPG, ca-cc-01-43-1427-F.jpg

私が望むのは、画像の ID * (nn-nn-nnnn)を取得し、その部分文字列でファイルの名前を変更することです。

*n は数値です。

上記のリストの結果は次のようになります: 01-19-1084.JPG, 02-40-0453.JPG, 01-43-1597.JPG, 04-30-2436.JPG, 02-26-0745.JPG, 01-43-1427.jpg .

これは、ディレクトリをループするために使用しているコードです。

 $dir = "images";

 // Open a known directory, and proceed to read its contents
 if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if($sub_str = preg_match($patern, $file))
            {
                rename($dir.'/'.$file, $sub_str.'JPG');
            }
        }
        closedir($dh);
    }
 }

では、私の$patternは、私が望むものを得るにはどうすればよいでしょうか?

4

2 に答える 2

3

$pattern は次のようにする必要があります。

$pattern = "/^.*(\d{2}-\d{2}-\d{4}).*\.jpg$/i"

このパターンは、ファイル名をチェックし、一致グループとして ID を取得できます。また、preg_math は文字列ではなく数値を返します。関数の 3 番目のパラメーターとして返されます。本体は次のようになります。

if(preg_match($patern, $file, $matches))
{
      rename($dir.'/'.$file, $matches[1].'.JPG');
}

$matches は、一致した文字列とグループの配列です。

于 2013-05-07T19:30:08.250 に答える