2

これは本当に簡単なはずですが、この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

私は何が間違っているのですか?

4

3 に答える 3

4

出力が得られなかった主な理由は、(グレッグが言ったように)パターンの末尾のスラッシュを忘れたためです。

ヒントとして、文字通り一致させたい場合は/、スラッシュをエスケープしないように、異なる正規表現区切り文字を使用してください。

したがって、これはあなたのパターンと一致します:

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

次に、誤解があり、一致したグループ$matches全体を含む配列を返し、$matches[0]次に一致したグループを返します。

したがって、印刷30する場合は、次のことを行う必要があります。

print($matches[1]);

数字は最初のキャプチャグループに保存されるためです。

于 2012-04-25T06:02:26.830 に答える
3
$uri = "/page/30/";
$pat = "/(?<=^\/page\/)\d+/";
preg_match($pat, $uri, $matches);
print_r($matches); //should print 30

正規表現をに変更し/(?<=^\/page\/)\d+/ます。説明については、ルックアラウンドアサーションに関するチュートリアルを参照してください。

于 2012-04-25T05:00:42.697 に答える
1

末尾のスラッシュは無視しています。これは正しく一致するはずです:

$pat = "/^\/page\/(\d+)\/$/";
于 2012-04-25T05:04:06.527 に答える