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;
}
`