[英]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/
。 我不希望正则表达式对此有所帮助,而只是检测模式并进行匹配。
例如。 如果给定的$URL
是dev.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.