これは本当にシンプルなはずですが、私はこのpreg_matchを動作させるのに苦労しています。私はこの「/ページ/ 30 /」 $の試合のようなURLからページ番号をキャプチャする
[0]私が間違って何をやっている30
$uri = "/page/30/";
$pat = "/^\/page\/(\d+)$/";
preg_match($pat, $uri,$matches);
print_r($matches); //should print 30
を返すのだろうか?
これは本当にシンプルなはずですが、私はこのpreg_matchを動作させるのに苦労しています。私はこの「/ページ/ 30 /」 $の試合のようなURLからページ番号をキャプチャする
[0]私が間違って何をやっている30
$uri = "/page/30/";
$pat = "/^\/page\/(\d+)$/";
preg_match($pat, $uri,$matches);
print_r($matches); //should print 30
を返すのだろうか?
主な理由は、出力がありませんでした(Greg氏のように)、あなたのパターンに後続のスラッシュを忘れました。
ヒントとして、/
を文字通り一致させたい場合は、異なる正規表現デリミタを使用して、スラッシュをエスケープしないようにします。
$uri = "/page/30/";
$pat = "~^/page/(\d+)/$~";
preg_match($pat, $uri, $matches);
print_r($matches); //should print 30
はその後
$matches
が、その後全体
$matches[0]
での試合とマッチしたグループを含む配列を返して、誤解があります:
これはあなたのパターンにマッチします。数字が最初のキャプチャグループに格納されているので
print($matches[1]);
:
だから、あなたが30
を印刷したい場合、あなたは何をする必要があります。
$uri = "/page/30/";
$pat = "/(?<=^\/page\/)\d+/";
preg_match($pat, $uri, $matches);
print_r($matches); //should print 30
正規表現を/(?<=^\/page\/)\d+/
に変更してください。詳細は、lookaround assertionsのチュートリアルを参照してください。
末尾のスラッシュを無視しています。これは正しく一致する必要があります:
これは問題ではありません。 –
問題は、末尾のスラッシュを考慮せずに、行末の文字がパターンに含まれていたことです。行末の文字が含まれていないので、ソリューションも同様に機能します。 – gcochard