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