我想检查当前$uri_string
是否匹配任何这些模式
$uri_string = 'project/details/1258';
$uri_patterns = [
'project/foo/',
'project/bizz/',
];
foreach($uri_patterns as $pattern) {
if(preg_match('/' . $pattern. '/i', $uri_string) == 1) {
echo 'Is a match!';
}
}
因此,如果在某个时刻$uri_string = 'project/foo/123/some-other-params';
,那么这可能与'project/foo/'
模式相匹配。我怎么能这样做?
答案 0 :(得分:3)
您需要从正则表达式中转义/
斜杠,如:
$uri_string = 'project/details/1258';
$uri_patterns = [
'project/foo/',
'project/bizz/',
];
foreach($uri_patterns as $pattern) {
$pattern = preg_quote($pattern, '/');
if(preg_match("/$pattern/i", $uri_string) == 1) {
echo 'Is a match!';
}
}
这使用preg_quote()
来逃避斜杠。
或者,您可以对正则表达式使用不同的delimiter
,例如#
:
preg_match("#$pattern#i", $uri_string);
或者你可以完全忽略正则表达式并使用字符串解析函数,如:
foreach($uri_patterns as $pattern) {
if(strpos($uri_string, $pattern) !== false) {
echo 'Is a match!';
}
}
答案 1 :(得分:2)
我认为你需要逃避这些正斜杠:
$uri_patterns = [
'project\/foo\/',
'project\/bizz\/',
];
然后为了您的比赛,请使用:
preg_match('/' . $pattern . '/i', $uri_string, $matches);
if (!empty($matches)) {
echo 'Is a match!';
}