Php 如何在preg\u match中检查specyfic url\u路径

Php 如何在preg\u match中检查specyfic url\u路径,php,regex,Php,Regex,如何检查特定路径是否与模式匹配 例如: 我有一个包含一个或多个未知变量的路径 $pathPattern = 'user/?/stats'; 假设我收到了这条路 $receivedPath = 'user/12/stats' 那么,如何检查接收到的路径是否与我的模式匹配 我试着做下面的事情,但没有成功 $pathPattern = 'user/?/stats'; $receivedPath = 'user/12/stats'; $pathPatternReg = str_replace

如何检查特定路径是否与模式匹配

例如:

我有一个包含一个或多个未知变量的路径

$pathPattern = 'user/?/stats';
假设我收到了这条路

$receivedPath = 'user/12/stats'
那么,如何检查接收到的路径是否与我的模式匹配

我试着做下面的事情,但没有成功

 $pathPattern = 'user/?/stats';
 $receivedPath = 'user/12/stats';

 $pathPatternReg = str_replace('?','.*',$pathPattern);
 echo preg_match('/$pathPatternReg/', $receivedPath);

谢谢。

对于未知的
用户\/[0-9]+\/stats

并且可以这样使用


如果如Tom所述(preg\u match(“user\/[0-9]+\/stats”,$variable)){……}

,则可能必须用“\”转义“/”字符

您只想匹配总查询字符串的一个特定部分,即中间的数字。大多数正则表达式解释器以圆括号的形式提供此功能,如下所示:

$pattern = "user\/([0-9]+)\/stats";
$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]
    ...
}
注意[0-9]+:它告诉preg_match将匹配模式的这一部分存储在$matches数组中

因此,您的代码可以如下所示:

$pattern = "user\/([0-9]+)\/stats";
$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]
    ...
}
$subject=“user/12/stats”;
$pattern=“user\/([0-9]+)\/stats”;
$matches=array();
if(预匹配($pattern,$subject,$matches)){
//有一场比赛
//$matches数组现在如下所示:
//{“user/12/stats”,“12”}
// { , .... }
$user_id=$matches[1]
...
}
(未测试) 另请参见此处:

谢谢booth。 这是一个解决方案:

$pathPattern = 'user/?/stats';
$receivedPath = 'user/12/stats';

$pathPatternReg = str_replace(['/','?'],['\/','.*'],$pathPattern);
$pattern = "/^$uri/";
echo preg_match($pattern, $receivedPath);
如果您认为任何可能的字符不总是int,则os将(.*)用于该字符