Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_match for"^/第/(\d&"x2B;)$”页;_Php_Regex_Preg Match - Fatal编程技术网

Php preg_match for"^/第/(\d&"x2B;)$”页;

Php preg_match for"^/第/(\d&"x2B;)$”页;,php,regex,preg-match,Php,Regex,Preg Match,这应该很简单,但我正在努力让这场比赛开始 我想从如下url中捕获页码“/page/30/” 其中$match[0]将返回30 $uri = "/page/30/"; $pat = "/^\/page\/(\d+)$/"; preg_match($pat, $uri,$matches); print_r($matches); //should print 30 我做错了什么?$uri=“/page/30/”; $uri = "/page/30/"; $pat = "/(?<=^\/page

这应该很简单,但我正在努力让这场比赛开始

我想从如下url中捕获页码“/page/30/” 其中$match[0]将返回30

$uri = "/page/30/";
$pat = "/^\/page\/(\d+)$/";
preg_match($pat, $uri,$matches);
print_r($matches); //should print 30
我做错了什么?

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

$pat=“/(?您忽略了尾随斜杠。这应该与它正确匹配:

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

您没有得到输出的主要原因是(如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]);

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

问题在于模式中包含了行尾字符,而没有考虑尾部斜杠。您的解决方案也可以,因为您没有包含行尾字符。