Preg_grep在可能的数组中查找请求URI

时间:2011-06-08 19:58:59

标签: php regex

我有一个包含可能的请求URI的数组。某些数组值可能包含逗号分隔的URI:

array(
     0 => 'GET /, GET /something',
     1 => 'GET /login',
     2 => 'GET /user/profile',
)

假设我想找到包含“GET / something”的密钥。我怎样才能使用preg_grep来做到这一点?目前,我正在尝试这个:

preg_grep('/(.*)GET \\'.$uri.'(.*)/', $array);

然而,我只是得到一个空数组。知道我做错了吗?

4 个答案:

答案 0 :(得分:2)

而不是在preg_grep的字符串中使用$ uri,首先将它连接到$ pattern var(为了便于阅读,主要是加上你可以回应它并检查上面的注释建议):

$uri = 'something';
$pattern = '/(.*)GET \/'.$uri.'(.*)/';
$array = preg_grep($pattern, $starting_array);
print_r($array);

至于具体回答你的问题,你逃脱了错误类型的斜杠:p

答案 1 :(得分:1)

尝试

  $array = array(
     0 => 'GET /, GET /something',
     1 => 'GET /login',
     2 => 'GET /user/profile',
  );

 $uri = 'something';
 $matches = preg_grep('{(.*)GET /'.$uri.'(.*)}', $array);
 var_dump(array_search($matches[0], $array));

答案 2 :(得分:0)

我没有PHP来测试这个,但according to the docs这样简单的东西可以起作用:

array_keys(preg_grep('!\bGET /something\b!', $array));

答案 3 :(得分:0)

试试这个:    $ arr = array('GET /,GET / something','GET / login','GET / user / profile');

preg_match("/GET\s*\/([^\n]+)/", join("\n", $arr), $matched); 
print_r($matched);