繁体   English   中英

正则表达式解决方案以查找正则表达式模式并对其进行解析。

[英]Regex solution to find a regex pattern and parse it.

我正在尝试为PHP写一个简单的路由器。 我正面临一些问题。 路线示例如下。

$route = []
$route['index']     = "/"; 
$route['home']      = "/home";
$route['blog']      = "/blog/[a-z]";
$route['article']   = "/article/id/[\d+]/title/[\w+]";

现在,如果我们以最后一个示例为例,我希望正则表达式仅查找诸如[\\d+][\\w+]之类的模式。 我将使用explode()来实际交叉检查URL是否包含/blog//id//title/ 我不希望正则表达式对此有所帮助,而只是检测模式并进行匹配。

例如。 如果给定的$URLdev.test/blog/id/11/title/politics

我需要一些像: preg_match($route['url'], $URL)

因此,现在preg_match()函数知道,在"/article/id/有一个模式仅要求出现一个数字,然后,如果找到该数字,它将继续解析,否则将显示fail或0

对于处理这个复杂问题,我对正则表达式了解不多。

您的问题尚不清楚,但是如果您只想捕获目标字符串的[\\ d +]或[\\ w +]部分,则应考虑使用方括号来捕获子匹配项,而(?:xxx)非捕获匹配项,它检查模式,但不将其添加到数组中,例如:

  $route['article']   = "(?:\/article\/id\/)([\d+])(?:\/title\/)([\w+])";

这只会将匹配的[\\ d +]和[\\ w +]添加到您的matchs数组中。 您会发现它们是这样的:

  $matches[0][0] and matches[1][0].

顺便说一下,有关正则表达式的出色教程,请参见http://www.regular-expressions.info/tutorial.html

如果您事先不确定'article','id'和'title'的值,则可能至少需要确保url中给定的目录数。 这意味着只要您知道[\\ d +]和[\\ w +]条目的位置,就可以使用

    $route['article'] = "(?:\/[\w+]\/[w+]\/)([\d+])(?:\/[\w+]\/)([\w+])"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM