1

名前の先頭に特定の文字列 (私の場合は日付スタンプ) があり、最後に特定の文字列 ".php" があるディレクトリ内のすべての PHP ファイルのリストを作成しようとしています。日付が変数 ($SearchDate) として渡されます。ディレクトリからファイルの完全なリストを読み込むように PHP スクリプトを既に正常にセットアップしており、preg_match を使用してリストをフィルタリングしようとしていました。残念ながら、このチートシートを繰り返し試しても、私は RegEx で完全に失敗しています。

これが私が持っているもので、エラーが発生し、結果がありません:

$SearchDate = '2013-02'; //example for february of 2013

if(preg_match('#^('.$SearchDate.')+[:graph:]{1}(\.(pdf))#', $file)) {
   //do something
}

私も試しました:

preg_match('#^\Q'.$SearchDate.'\E+[:graph:]{1}\Q.pdf\E#', $file)

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

2013-02-ファイル名MightBeAlphaOr1234567890.pdf

私が得ているエラーは次のようになります。

警告: preg_match() [function.preg-match]: コンパイルに失敗しました: POSIX 名前付きクラスは、26 行目の /home/directory/myfile.php のオフセット 5 のクラス内でのみサポートされます

4

3 に答える 3

2

「.pdf」で終わることも確認する必要があるため、基本的にファイル名の最初と最後が必要で、途中で何が起こるかは気にしません。

その場合は、次の正規表現が機能するはずです。

if(preg_match('#^' . $SearchDate . '.*?\.pdf$#', $file)) {
   //do something
}

ライブデモ: http://ideone.com/h66GY0

于 2013-04-13T05:45:23.843 に答える
1

この単純な正規表現は機能するはずです

preg_match('/^'.$SearchDate.'/', $file);
于 2013-04-13T05:30:33.993 に答える
0

を追加{}てグラフに...のように

     preg_match('#^('.$SearchDate.')+[{:graph:}]{1}(\.(pdf))#', $file)
于 2013-04-13T05:40:13.727 に答える