这应该很简单,但我努力让这个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
我在做什么错?
主要的原因,你没有得到一个输出(如格雷格说),你忘了结尾的斜线在您的模式。
作为一个提示,如果您想从字面上匹配/
,请使用不同的正则表达式分隔符,以避免跳过斜线。
因此,这将匹配你的格局:
$uri = "/page/30/";
$pat = "~^/page/(\d+)/$~";
preg_match($pat, $uri, $matches);
print_r($matches); //should print 30
然后有一个误区,$matches
返回了包含$matches[0]
全场比赛,然后匹配组的数组。
所以,如果你想打印30
你需要做的:
print($matches[1]);
,因为数字存储第一捕获小组。
$uri = "/page/30/";
$pat = "/(?<=^\/page\/)\d+/";
preg_match($pat, $uri, $matches);
print_r($matches); //should print 30
将正则表达式更改为/(?<=^\/page\/)\d+/
。有关说明,请参阅lookaround assertions上的教程。
你无视尾部斜线。这应该正确地匹配它:
$pat = "/^\/page\/(\d+)\/$/";
这不是问题所在。 – 2012-04-25 05:08:23
问题是模式中包含行尾字符,而没有考虑尾部斜线。您的解决方案也适用,因为您没有包含行尾字符。 – gcochard 2012-04-25 15:28:15