2013-05-21 79 views
1

我正在編寫正則表達式,當我在線檢查以下正則表達式時,它能正常工作。但是,它在PHP中返回錯誤。這是爲什麼?編譯失敗:在偏移量處不匹配的圓括號

preg_match_all('/^[([a-z]+\[[a-z| |,]+\])\,?]+$/', $methods, $result); 

回報

Severity: Warning 

Message: preg_match_all() [function.preg-match-all]: Compilation failed: unmatched parentheses at offset 23 

我想這一個了:

preg_match_all('/^[([a-z]+\\[[a-z| |,]+\\])\\,?]+$/', $methods, $result); 
+1

你是如何「在線檢查它」的,你確定這個在線工具正在檢查PHP regex語法嗎?當你遇到錯誤時,你正在使用什麼版本的PHP? –

+1

@MattBall php被標記,也preg_match_all是一個PHP函數 –

+0

@JuanAntonioOrozco是的,我知道':)'謝謝 –

回答

2

如果更改字符組(括號內)外Character類([]),它會編譯,但即時通訊不知道你想匹配什麼樣的字符串:

/^(([a-z]+\[[a-z| |,]+\])\,?)+$/ 

想在這個example

我想這是因爲你不能把嵌套字符類,因爲這樣你的正則表達式中的3份這樣的結束,他們將失去意義引起:

[([a-z]+ 

\[[a-z| |,]+ 

\])\,?]+ 

無與倫比結束進入括號

+1

Character class。嵌套字符類沒有意義,所以沒有語法。在字符類內部,']'是一個元字符,除非被轉義,否則將被解釋爲結束字符類,而'['是正常的。 http://regular-expressions.info/reference.html – Patashu

+0

謝謝,我知道西班牙語怎麼叫,但我沒有發現在英語中的參考,我沒有相信它是直譯 –

相關問題