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.