電子書籍の厳選無料作品が豊富!

正規表現を使い、URLで条件分岐したいのですが、
うまくいかないので、教えてください。

<やりたいこと>
http://ドメイン/page1.html
http://ドメイン/page2.html
      :
のページの時のみ、
という条件分岐をしたい。

<現状>
if($_SERVER['REQUEST_URI']=="/page1.html"){
とするとうまくいくのですが、
これを任意のpage○で対応したい

$_SERVER['REQUEST_URI']=="^/page*.html$"){
としたけど、ダメでした。

どう書けば、よいでしょうか?

A 回答 (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
や各解説書、解説サイト等を参考に。
    • good
    • 0
この回答へのお礼

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

ありがとうございましたー。

お礼日時:2011/03/05 16:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!