PHP:转义RegEx保留字符 - 任何人都知道这有什么问题?

Gre*_*reg 5 php regex str-replace

我试图用反斜杠逃避正则表达式保留字符(不要问 - 足以说我不是要解析HTML :))而且我得到了一些奇怪的东西.

$regex_chars = array('[' , '\\' , '^', '$' , '.' , '|' , 
    '?' , '*' , '+' , '(' , ')');  
$regex_chars_escaped = array('\[ ' , '\\\\ ' , '\^ ', '\& ' , 
    '\. ' , '\| ' , '\? ' , '\* ' , '\+ ' , '\( ' , '\)'); 
$escaped_string = str_replace($regex_chars,$regex_chars_escaped,
     implode("",$regex_chars));
echo implode('&nbsp;',$regex_chars) . "<br />";
echo $escaped_string;
Run Code Online (Sandbox Code Playgroud)

空间是为了清楚.这是输出

[ \ ^ $ . | ? * + ( )
\\ [ \\ \^ \& \. \| \? \* \+ \( \)
Run Code Online (Sandbox Code Playgroud)

所以一切都很好,除了第一部分."\\"来自哪里,为什么不是"\ ["?

Bar*_*ers 22

为什么不简单地使用preg_quote

  • 可能是因为我是一个该死的白痴.谢谢! (11认同)