preg_match为“^ / page /(\ d +)$”

时间:2012-04-25 04:58:40

标签: php regex preg-match

这应该非常简单,但我正在努力让这个preg_match工作。

我想从像这样的网址中捕获网页编号“/ page / 30 /” 其中$ match [0]将返回30。

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

我做错了什么?

3 个答案:

答案 0 :(得分:4)

主要原因是,你没有得到输出(就像Greg说的那样),你忘记了模式中的尾部斜杠。

作为提示,当你想要按字面意思匹配/时,请使用不同的正则表达式分隔符,以避免转义斜杠。

所以这符合你的模式:

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

然后有一个误解,$matches返回一个数组,其中包含$matches[0]中的整个匹配,然后是匹配的组。

因此,如果您想打印30,您需要执行以下操作:

print($matches[1]);

因为数字存储在第一个捕获组中。

答案 1 :(得分:3)

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

将正则表达式更改为/(?<=^\/page\/)\d+/。有关说明,请参阅lookaround assertions上的教程。

答案 2 :(得分:1)

您无视尾随斜杠。这应该正确匹配:

$pat = "/^\/page\/(\d+)\/$/";