0

PHP で preg_match を使用して、URL の形式をテストしたいと考えています。URL は次のようになります。

/2013/09/05/item-01.html

私はこれを機能させようとしています:

if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$", $_SERVER['REQUEST_URI'])) :
    echo "match";
endif;

しかし、何かが正しくありません。何か案は?

4

3 に答える 3

0

いくつかの小さな問題がありますが、持っているものでほぼ正しいようです

  1. page.html の前の最後の「/」をエスケープするのを忘れました
  2. [.]+ は [^.]+ である必要があります。1 つ以上のピリオドを探しているわけではありません。ピリオド以外のものを探しています。
  3. [] を使用して html に一致させるべきではなく、むしろ () または何も使用しないでください。
if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})\/([^.]+.html )$", $_SERVER['REQUEST_URI'])) :
    echo "マッチ";
endif;

また、() をいつ使用するかを学ぶ必要があります。これらは、一致するものを内部に格納していることを確認するために使用されます。あなたの場合、ファイルまですべてのディレクトリを保存するかどうかはわかりません。

于 2013-05-09T13:39:40.713 に答える
0

私の推測では、ファイルpathの有効な式があり、ファイル名の部分を追加しようとしたときに機能しなくなったのです。

preg_match()区切り文字のペアを指定する必要があります。式の両端に 1 つずつ。これらがあるように見えますが、デリミタの外側の文字列の末尾に式 (つまりファイル名) の余分なビットを入れています。これは無効です。

  "/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$"
   ^                                  ^
your start delimiter             your end delimiter

[.]+[.html]$現在終了デリミタの後にある式コードを移動して、その中に入れる必要があります。

これで問題は解決するはずです。

于 2013-05-09T14:12:07.467 に答える