正则表达式无法正常工作

时间:2016-02-20 15:48:38

标签: php regex

我编写了一个小型路由系统,允许我在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列表,因此可以包含:

  • 交易/.+
  • 用户/.+
  • 交易/示例/.+
  • 足球/.+

依旧......

1 个答案:

答案 0 :(得分:1)

这个正则表达式应该有效:

"^[^/]+\/[^/]+\/?$/"

Example

  • 匹配至少一个字符(不是/),但在字符串的开头匹配尽可能多的字符,后跟斜杠
  • [^/]*匹配尽可能多的不是斜杠的字符
  • \/?$字符串的最后一个字符应为可选的斜杠

(注意到这个答案包含“斜线”这个词很多)