如何在preg_match中检查特定的url_path

时间:2018-07-23 09:12:40

标签: php regex

如何检查特定路径是否与图案匹配。

示例:

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

$pathPattern = 'user/?/stats';

说我收到了这条路

$receivedPath = 'user/12/stats'

那么,如何检查接收到的路径是否与我的图案匹配?

我试图做下面的事情,但是没有用。

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

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

谢谢。

3 个答案:

答案 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);