悲しいことに、私はこの質問をしなければなりませんが、午前中この問題にうなずいた後、私はあきらめます。オンライン、マニュアルページ、ドキュメントを検索しても、私がやろうとしていることに対する決定的な答えは得られないようです。
文字列をパターンと照合するためのPHP関数preg_matchの正規表現を探しています。今、そのパターンは私に頭痛を与えるものです。
パターンは次のように表現する必要があります。文字列は「_MG_」または「IMG_」または「DSC_」で始まり、4桁の数字が続き、オプションの「-N」が続きます。Nは別の数字です。たとえば、「IMG_0123」または「DSC_9876-3」は有効です。それ以外はすべて拒否する必要があります。
いろいろなパターンを思いついたのですが、どれもうまくいかないようです。たとえば、私は試しました
(_MG_|IMG_|DSC_)[0-9]{4}(-[0-9])?
これは、さまざまな部分式の周りに()とアポストロフィを使用してさまざまなバリエーションで使用し、?を使用します。vs{0,1}など。(grepを使用して実験しましたが、まだ一致するものはありません。)はい、PHPの場合は「/.../」を追加する必要があることはわかっていますが、読みやすくするためにここでは省略しました。
これを単一の式で表現することもできますか、それともマッチング関数を数回呼び出す必要がありますか?複数の一致が必要な場合は、自分自身に一致するこの特定の文字列に対して小さなパーサーを作成する方がよい場合があります。
ありがとう!
編集:これが私が使っているコードです
// Iterate over all images in this gallery folder.
if ($h = opendir($dir)) {
while (($f = readdir($h)) !== false) {
// Skip images whose name doesn't match the requirement.
if (0 == preg_match("/(_MG_|IMG_|DSC_)[0-9]{4}(-[0-9]){0,1}/", $f)) {
continue;
}
...
}
}
また、これにより、「_ MG_7020-1-2.jpg」、「_ MG_7444-5-6.2.jpg」、「IMG_6543_2_4_tonemapped.jpg」などの画像名も使用できるようになりますが、これは許可したいことではありません。