让我说我有阵列:
[test1] = '/'
[test2] = '/foo'
[test3] = '/foo/*'
[test4] = '/bar/*'
[test5] = '/baz/*/bar'
什么是有效的grep规则,这些规则需要转换为满足对输入执行preg_match
函数(使用规则作为模式),以便返回以下输入。例如,需要封装规则的内容是什么,以及*
需要替换的内容是什么?
input : returned
/ : test1
/foo : test2
/foo/bar : test3
/foobar : none
/bar : test4
/bar/foo : test4
/barfoo : none
/baz/foo/bar : test5
/baz//bar : none
答案 0 :(得分:1)
替换为:
[^/]+
这表示非空字符串的非空字符。我根据你的上一个例子做出假设(/baz//bar
返回“无”)。
当然,如果需要,可以逃避斜线。
答案 1 :(得分:1)
我认为从字符串中提取path
和filename
可能更好:
^(\/(?:[^\\/:*?"<>|]+\/)*)([^\\/:*?"<>|]+)*$
第1组:path
第2组:filename
使用这些信息进行表查找(例如哈希数组)
答案 2 :(得分:1)
最后,我做到了这一点:
<?php
$urlRule = str_replace('/', '\/', $urlRule);
$urlRule = '/^('.str_replace('*', ')(.*)(', $urlRule).')$/';
if (count(preg_grep($urlRule, array($url))) > 0) { ...
对于每条规则,但我确实需要包含
[test4] = '/bar'
为了实现
input : returned
/bar : test4