PHP PCRE error preg_replace

前端 未结 1 470
感动是毒
感动是毒 2021-01-27 03:26


        
相关标签:
1条回答
  • 2021-01-27 04:08

    It seems you want to escape special regex characters. This function already exists and is called preg_quote().


    You get the error, because you don't escape \ properly:

    TI - Yeah U Know \[OFFCIAL VIDEO\] \[TAKERS\] \[w\LYRICS\]
    //                   this is not escaped   ------^
    

    and \L has special meaning in Perl regular expression:

    \L Lowercase until \E

    but is not supported in PHP's PCRE (Perl Differences):

    The following Perl escape sequences are not supported: \l, \u, \L, \U. In fact these are implemented by Perl's general string-handling and are not part of its pattern matching engine.

    Update:

    Obviously, you cannot use the escaped version as value and as pattern, because in the pattern \[ will be treated as [ and but in the value \[ is taken literally. You have to store the escaped string in a new variable:

    $var = "TI - Yeah U Know [OFFCIAL VIDEO] [TAKERS] [w\LYRICS]";
    
    $escaped = preg_quote($var);
    echo $escaped . PHP_EOL;
    // prints "TI - Yeah U Know \[OFFCIAL VIDEO\] \[TAKERS\] \[w\\LYRICS\]"
    $var = preg_replace('#' . $escaped . '#isU', 'test', $var);
    echo $var;
    // prints test
    

    or easier:

    $var = preg_replace('#' . preg_quote($var) . '#isU', 'test', $var);
    

    Side note: If you really wanted to match \[ in a string, the regular expression would be \\\\\[. You see, it can get quite ugly.

    0 讨论(0)
提交回复
热议问题