Php 用于标识URL的速记Preg匹配规则

Php 用于标识URL的速记Preg匹配规则,php,regex,preg-match,Php,Regex,Preg Match,假设我有一个数组: [test1] = '/' [test2] = '/foo' [test3] = '/foo/*' [test4] = '/bar/*' [test5] = '/baz/*/bar' 需要转换成什么样的有效grep规则才能满足对输入执行preg_match功能(以规则为模式)的要求,以便返回以下输入。如中所示,规则需要封装在什么中,以及需要用什么替换*s input : returned / : test1 /foo

假设我有一个数组:

[test1] = '/'
[test2] = '/foo'
[test3] = '/foo/*'
[test4] = '/bar/*'
[test5] = '/baz/*/bar'
需要转换成什么样的有效grep规则才能满足对输入执行
preg_match
功能(以规则为模式)的要求,以便返回以下输入。如中所示,规则需要封装在什么中,以及需要用什么替换
*
s

input          :   returned
/              :   test1
/foo           :   test2
/foo/bar       :   test3
/foobar        :   none
/bar           :   test4
/bar/foo       :   test4
/barfoo        :   none
/baz/foo/bar   :   test5
/baz//bar      :   none
替换为:

[^/]+
这表示非斜杠字符的非空字符串。我根据您的上一个示例(
/baz//bar
返回“无”)进行假设


当然,如果需要,请转义斜杠。

我认为从字符串中提取
path
filename
可能更好:

^(\/(?:[^\\/:*?“|]+\/)*)([^\\/:*?“|]+)*$

第1组:
路径

第2组:
filename


使用这些信息进行表查找(例如哈希数组)

最后,我完成了以下操作:

<?php
$urlRule = str_replace('/', '\/', $urlRule);
$urlRule = '/^('.str_replace('*', ')(.*)(', $urlRule).')$/';

if (count(preg_grep($urlRule, array($url))) > 0) { ...
为了实现

input          :   returned
/bar           :   test4

啊,酷,在expresso工作。需要做什么才能将其转换为PCRE格式?
input          :   returned
/bar           :   test4