これは本当に簡単なはずですが、このpreg_matchを機能させるのに苦労しています。
この「/page/ 30/」のようなURLからページ番号を取得したいのですが、$match[0]は30を返します。
$uri = "/page/30/";
$pat = "/^\/page\/(\d+)$/";
preg_match($pat, $uri,$matches);
print_r($matches); //should print 30
私は何が間違っているのですか?
これは本当に簡単なはずですが、このpreg_matchを機能させるのに苦労しています。
この「/page/ 30/」のようなURLからページ番号を取得したいのですが、$match[0]は30を返します。
$uri = "/page/30/";
$pat = "/^\/page\/(\d+)$/";
preg_match($pat, $uri,$matches);
print_r($matches); //should print 30
私は何が間違っているのですか?
出力が得られなかった主な理由は、(グレッグが言ったように)パターンの末尾のスラッシュを忘れたためです。
ヒントとして、文字通り一致させたい場合は/
、スラッシュをエスケープしないように、異なる正規表現区切り文字を使用してください。
したがって、これはあなたのパターンと一致します:
$uri = "/page/30/";
$pat = "~^/page/(\d+)/$~";
preg_match($pat, $uri, $matches);
print_r($matches); //should print 30
次に、誤解があり、一致したグループ$matches
全体を含む配列を返し、$matches[0]
次に一致したグループを返します。
したがって、印刷30
する場合は、次のことを行う必要があります。
print($matches[1]);
数字は最初のキャプチャグループに保存されるためです。
$uri = "/page/30/";
$pat = "/(?<=^\/page\/)\d+/";
preg_match($pat, $uri, $matches);
print_r($matches); //should print 30
正規表現をに変更し/(?<=^\/page\/)\d+/
ます。説明については、ルックアラウンドアサーションに関するチュートリアルを参照してください。
末尾のスラッシュは無視しています。これは正しく一致するはずです:
$pat = "/^\/page\/(\d+)\/$/";