3

私はこの正規表現を持っています:

'/^files\/(.+\..+)$/';

しかし、「files/」セクションをランタイム変数に置き換えたいと思います。

私はこれを試しました:

$filePath = "files/";
'/^'.$filePath.'(.+\..+)$/';

これと同様に機能しませんでした:

$filePath = preg_quote("files/");
'/^'.$filePath.'(.+\..+)$/';

しかし、preg_match 行のこのループでエラーが発生し、"(" は不明な修飾子であるというメッセージが表示されます。

foreach (glob(FILE_PATH."*.*") as $filename) {
    preg_match($pattern, $filename, $matches);
    echo "<option class='file' value='".$matches[1]."'>".$matches[1]."</option>";
}

どんな助けでも感謝します、ありがとう。

編集

これは機能します...

$filePath = 'files\/';

...しかし、実際の使用では、別のファイルで宣言された定数を使用しようとしています。

そう:

define('FILE_PATH', 'files/');

...そして、その定数を使用しようとしています。アプリケーションの他の部分がエスケープ文字なしでそれを必要とするため、エスケープ文字を埋め込むことはできません。

4

1 に答える 1

3

preg_quote区切り文字を渡す必要があります。

$filePath = preg_quote("files/", '/');

区切り文字として多くの文字を使用できるため、 を使用するpreg_quoteことを認識できないため/、デフォルトではエスケープしません。これが、2 番目の (オプションの) パラメーターの目的です。

それ以外の場合は、2 番目のアプローチ (を使用するものpreg_quote) が適しています。

于 2012-11-25T14:46:32.837 に答える