2012-08-10 65 views
1

可以說我有數組:速記的Preg匹配規則對識別網址

[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 

回答

1

最後,我做了這個:

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

if (count(preg_grep($urlRule, array($url))) > 0) { ... 

爲每個規則,但我確實需要包括

[test4] = '/bar' 

以達到

input   : returned 
/bar   : test4 
1

替換:

[^/]+ 

這是說非斜槓一個非空字符串。我基於你的最後一個例子做出假設(/baz//bar返回「none」)。

當然,如果需要逃避斜線。

+0

啊涼,工程快報。需要做些什麼才能將其轉換爲PCRE格式? – topherg 2012-08-10 18:24:42

1

我想從字符串中提取pathfilename可能會更好:

^(\/(?:[^\\/:*?"<>|]+\/)*)([^\\/:*?"<>|]+)*$

組1:path
組2:filename

利用這些信息做查表(如哈希陣列)