1

私はいくつかの正規表現(それは機能します)を使用していますが、実際にはそれが何をしているのか理解していません。科学者である私は、自分がしていることすべてに従うのが好きです。

コードはこのSOの回答からのものです:https ://stackoverflow.com/a/118886/889604

$mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file);
return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);

このコードはファイル名(eg)を取り、ファイルの( eg /files/style.css)を追加します。mtime/files/styles.1256788634.css

だから、私はそれを取得し^$記号は一致する文字列の始まりと終わりであり、./(のために)任意の文字と何度も一致しますが、ファイル名と拡張子の間+でどのようにmtime終わるのですか?

4

3 に答える 3

1

およびは区切り文字として使用され、検索パターン{}は含まれません。 \\.ドットを説明しています。エスケープされていないドットは単一の文字の存在を表すため、ドットはエスケープする必要があります(したがってバックスラッシュ)。丸括弧は、2番目のパラメーターで( ... )アクセスできるグループを定義します。このグループのコンテンツは、で構成されています。$1preg_replace[^./]+

正の量(セットの後を介して定義される)は、ドットまたはスラッシュ+ではない(^セットの先頭にある)単一の文字を意味します。not./

丸括弧の後$には、行の終わりを表すaが続きます。

.css式は、のようにパスのファイル拡張子と一致しますcssが、グループの値になります$1。したがって、php変数の値はwhere.cssに置き換えられます。.$mtime.css$mtime

于 2013-03-23T15:43:26.100 に答える
0

mtimePHPの文字列補間ルールにより、最終的に出力になります。これにより、二重引用符で囲まれた文字列内で参照される変数は、変数名のリテラルテキストではなく、変数の値を出力します。詳細については、 http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double(セクションの最後の文)を参照してください。

于 2013-03-23T15:39:57.813 に答える
0

正規表現パターンが実行しているのは、ファイル拡張子全体を置き換え、括弧を使用して.cssピリオドなしで拡張子をキャプチャに保存することだけです。次に、からの拡張子をピリオド、値、別のピリオド、および正規表現からキャプチャされた拡張子に置き換えます。css([^./]+).css$file$mtime$1

注:^は、文字列の先頭を意味するものではありません。[^./]「これらのキャラクター以外のキャラクターと一致する」と言っているようなグループにいる場合

私はそれがすべて理にかなっていることを願っています。

\\.編集:$ fileで見つかった最初のピリオドで開始し、次にキャプチャを実行するように正規表現に指示するため、$fileの.css部分にのみ一致します。\\.それ以外の場合は、任意の文字に一致する正規表現期間のように機能するため、 でエスケープする必要があります。

于 2013-03-23T15:40:17.020 に答える