我有一个包含可能的请求URI的数组。某些数组值可能包含逗号分隔的URI:
array(
0 => 'GET /, GET /something',
1 => 'GET /login',
2 => 'GET /user/profile',
)
假设我想找到包含“GET / something”的密钥。我怎样才能使用preg_grep来做到这一点?目前,我正在尝试这个:
preg_grep('/(.*)GET \\'.$uri.'(.*)/', $array);
然而,我只是得到一个空数组。知道我做错了吗?
答案 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);