我编写了一个小型路由系统,允许我在Rest API上定义URL的结构逻辑:
$listUri = "transaction /.+";
$uri = isset($_REQUEST['uri'])? $_REQUEST['uri']: '/'; //Transaction/19.02.2016
if(preg_match ("#$#^$listUri$#",$ uri)
{
echo "done!";
}
正如您所看到的,$listUri
包含所有映射的网址(系统可接受的网址),因此我可以迭代它并尝试匹配网址。变量$uri
获取浏览器中的当前url,现在我使用一个简单的正则表达式来匹配url,上面显示的示例一切正常。但是,我们可能会遇到这样的情况:
$listUri = "transaction/.+";
$uri = isset ($_REQUEST['uri'])? $_REQUEST ['uri']: '/'; //Transaction/19.02.2016/user
if(preg_match("#$#^$listUri$#", $ uri))
{
echo "done!";
}
变量$listUri
包含“/.+”,因此映射的url只能在“事务”之后接受一个参数(已在第一个示例中显示)。这次变量$uri
包含一个错误的请求,如第一个例子所示,事实上请求是正确的,但这次有一个user
after参数,因为它是错误的。为什么这是错的? '因为$listUri
网址被映射为“事务/。+”,这意味着如果我放置。不应打印“+ / user”回显。
我应该这样做,以实现一个正则表达式,允许我识别是否有“。+”并且如果它们匹配当前的url。显然,网址是动态的,因此您必须创建一个适用于所有人的模式。
本质上(以示例为例):
$listUri => "transaction /.+"
操作
$uri => "transaction/19.02.2016/" (corrected)
$uri => "transaction/19.02.2016/user/test/dd" (wrong - mapping only accepts transaction/.+ other parameters mmust not be taken into account)"
我不知道我是否清楚。我希望有人帮助我建立正则表达式,我对它不是很好。
更新 $listUri
内容
$listUri
包含映射的uri列表,因此可以包含:
依旧......
答案 0 :(得分:1)
这个正则表达式应该有效:
"^[^/]+\/[^/]+\/?$/"
/
),但在字符串的开头匹配尽可能多的字符,后跟斜杠[^/]*
匹配尽可能多的不是斜杠的字符\/?$
字符串的最后一个字符应为可选的斜杠(注意到这个答案包含“斜线”这个词很多)