如何检查特定路径是否与图案匹配。
示例:
我有一个带有一个或多个未知变量的路径
$pathPattern = 'user/?/stats';
说我收到了这条路
$receivedPath = 'user/12/stats'
那么,如何检查接收到的路径是否与我的图案匹配?
我试图做下面的事情,但是没有用。
$pathPattern = 'user/?/stats';
$receivedPath = 'user/12/stats';
$pathPatternReg = str_replace('?','.*',$pathPattern);
echo preg_match('/$pathPatternReg/', $receivedPath);
谢谢。
答案 0 :(得分:1)
对于未知的user\/[0-9]+\/stats
并且可以原样使用;
if(preg_match("user\/[0-9]+\/stats",$variable)) { .... }
答案 1 :(得分:0)
如汤姆所言,您可能必须用'\'转义'/'字符。
您只想匹配总查询字符串的一个特定部分,即中间的数字。大多数正则表达式解释器都以圆括号的形式提供此功能,如下所示:
$pattern = "user\/([0-9]+)\/stats";
请注意[0-9] +周围的圆括号:它告诉preg_match将这部分匹配模式存储在$ matches数组中。
因此,您的代码可能如下所示:
$subject = "user/12/stats";
$pattern = "user\/([0-9]+)\/stats";
$matches = array();
if( preg_match($pattern, $subject, $matches) ){
// there was a match
// The $matches array now looks like this:
// { "user/12/stats", "12" }
// { <whole matched string>, <string in first parenthesis>, .... }
$user_id = $matches[1]
...
}
(未经测试) 另请参见此处:https://secure.php.net/manual/en/function.preg-match.php
答案 2 :(得分:0)
谢谢您的展位。 这是一个解决方案:
$pathPattern = 'user/?/stats';
$receivedPath = 'user/12/stats';
$pathPatternReg = str_replace(['/','?'],['\/','.*'],$pathPattern);
$pattern = "/^$uri/";
echo preg_match($pattern, $receivedPath);