有没有办法使用preg_quote
而忽略要转义的命名子模式?例如:
/login/?next=(?P<next_url>.*)
将被转义到
'/login'/'?next'=(?P<next_url>.*)
而不是
'/login'/'?next'='('?P'<next_url'>'.'*')
谢谢
您可以将正则表达式构建为单独的部分,以便仅preg_quote
所需的表达式部分。
例如:
$pattern = preg_quote(''/login'/?next=').'(?P<next_url>.*)';
我通过实现自己的函数做了一个解决方法:
protected function escapeUrlPattern($pattern) {
$chars = array('/', '=', '-', '.', '''', '+', '*', '?', '^', '$', '{', '}', '!', '<', '>', '|', ':',);
$patternChars = str_split($pattern);
$idle = false;
$escapedPattern = "";
foreach ($patternChars as $char) {
if ($char == "(" || $char == "[")
$idle = true;
if (!$idle && in_array($char, $chars))
$char = "''" . $char;
$escapedPattern .= $char;
if ($char == ")" || $char == "]")
$idle = false;
}
return $escapedPattern;
}
'