2012-08-08 268 views
2

問題正則表達式:PHP正則表達式不起作用。問題與反斜槓?

$reg = '/[.]{1,}[\/\\]/'; 
if(preg_match($reg, $dir))... 

我測試過的http://regexpal.comhttp://regex.larsolavtorvik.com/這種表達它工作得很好,但在我的PHP腳本我得到這個通知。

Message: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 12 

我弄亂了'\'的數量,但它沒有改變任何東西。有什麼可能會出錯的建議?

我試圖尋找類似的問題,但我似乎遇到的是沒有添加分隔符的人。

+1

是的,這是一種混亂。看到這個答案:http://stackoverflow.com/a/2145823/1382779 – Nathanael 2012-08-08 19:20:11

回答

4

這是因爲\\將被PHP逃到一個\,這將使preg_match評估您的圖案作爲

/[.]{1,}[\/\]/ 

要在PHP字符串2個反斜線,你需要實際鍵入4:

$reg = '/[.]{1,}[\/\\\\]/'; 
preg_match($reg, "test"); 

或者使用PHP的定界符:

$reg = <<<REGEX 
/[.]{1,}[\/\\\\]/ 
REGEX; 
preg_match($reg, "test"); 

編輯:看起來像Heredoc還需要4反斜槓。這是因爲控制字符如\n