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 回答