2012-04-25 7 views
2

これは本当にシンプルなはずですが、私はこのpreg_matchを動作させるのに苦労しています。私はこの「/ページ/ 30 /」 $の試合のようなURLからページ番号をキャプチャする

[0]私が間違って何をやっている30

$uri = "/page/30/"; 
$pat = "/^\/page\/(\d+)$/"; 
preg_match($pat, $uri,$matches); 
print_r($matches); //should print 30 

を返すのだろうか?

答えて

4

主な理由は、出力がありませんでした(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を印刷したい場合、あなたは何をする必要があります。

3
$uri = "/page/30/"; 
$pat = "/(?<=^\/page\/)\d+/"; 
preg_match($pat, $uri, $matches); 
print_r($matches); //should print 30 

正規表現を/(?<=^\/page\/)\d+/に変更してください。詳細は、lookaround assertionsのチュートリアルを参照してください。

1

末尾のスラッシュを無視しています。これは正しく一致する必要があります:

+0

これは問題ではありません。 –

+0

問題は、末尾のスラッシュを考慮せずに、行末の文字がパターンに含まれていたことです。行末の文字が含まれていないので、ソリューションも同様に機能します。 – gcochard