2009-11-24 33 views
4

我試圖逃避正則表達式保留字符與反斜槓(不要問 - 只要它說我不想解析HTML :))我得到一些奇怪的東西。PHP:轉義RegEx保留字符 - 任何人知道這有什麼問題?

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

空格是爲了清楚起見。這是輸出

[ \^$ . | ? * + () 
\\ [ \\ \^ \& \. \| \? \* \+ \(\) 

所以一切都很好,除了第一部分。 「\\」從哪裏來,爲什麼不是「\\」?

回答

21

爲什麼不簡單使用preg_quote

+11

可能是因爲我是一個該死的白癡。謝謝! – Greg 2009-11-24 11:15:51

+0

不客氣格雷格。 – 2009-11-24 11:59:24

+0

+1對你的評論不是因爲你是一個該死的白癡,而是因爲你是一個該死的幽默白癡。 – Ben 2013-04-19 07:43:50

2

我相信這只是因爲你把字符放在數組中。試試這個:

$regex_chars = array('\\' , '[' , '^', '$' , '.' , '|' , 
     '?' , '*' , '+' , '(' , ')'); 
$regex_chars_escaped = array('\\\\ ' ,'\[ ', '\^ ', '\& ' , 
     '\. ' , '\| ' , '\? ' , '\* ' , '\+ ' , '\(' , '\)'); 

你應該得到預期的輸出。檢查'潛在陷阱'部分在str_replace function spec

+0

我結束了使用preg_quote,但這是有用的知道,謝謝。 – Greg 2009-11-25 00:55:06

相關問題