• ベストアンサー

正規表現を使い、URLで条件分岐したいのですが…

正規表現を使い、URLで条件分岐したいのですが、 うまくいかないので、教えてください。 <やりたいこと> http://ドメイン/page1.html http://ドメイン/page2.html       : のページの時のみ、 という条件分岐をしたい。 <現状> if($_SERVER['REQUEST_URI']=="/page1.html"){ とするとうまくいくのですが、 これを任意のpage○で対応したい $_SERVER['REQUEST_URI']=="^/page*.html$"){ としたけど、ダメでした。 どう書けば、よいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

まず、 == は完全一致であって、正規表現とのマッチングではない。 $_SERVER['REQUEST_URI'] =="^/page*.html$" は 「$_SERVER['REQUEST_URI']が"^/page*.html$"という文字列と等しい」という意味になる、というのが一点。 preg_match関数等の正規表現用の関数を使う。 もう一点は、正規表現が目的のものと一致していない。 *は「直前の表現の0回以上の繰り返し」 .は「任意の一文字」 という意味がある。なので、この表現だと 先頭 / p a g eの0回以上の繰り返し 任意の一文字 h t m l 最後 という文字列と一致する。 一つ以上の数字なら [0-9]+ .の特殊な意味を無効にするなら \. とエスケープする。 また、preg_*を使うなら、表現の前後にデリミタが必要。 以上をまとめると if ( preg_match( '#^/page[0-9]+\.html$#', $_SERVER['REQUEST_URI'] ) { より詳細はマニュアル http://jp2.php.net/manual/ja/book.pcre.php や各解説書、解説サイト等を参考に。

re999
質問者

お礼

正解だけでなく、 どこが違うのかを丁寧に解説していただいたので、 大変参考になりました。 ありがとうございましたー。