0

preg_quoteエスケープする名前付きサブパターンを使用して無視する方法はありますか? 例えば ​​:

/login/?next=(?P<next_url>.*)

にエスケープされます

\/login\/\?next\=(?P<next_url>.*)

それ以外の

\/login\/\?next\=\(\?P\<next_url\>\.\*\)

ありがとう

4

2 に答える 2

2

必要な式の部分だけにするために、正規表現を別々の部分に構築することができpreg_quoteます。

例えば:

$pattern = preg_quote('\/login\/?next=').'(?P<next_url>.*)';
于 2012-04-24T17:46:37.890 に答える
1

独自の関数を実装することで回避策を作成しました。

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

`

于 2012-04-28T12:03:11.457 に答える