2014-03-03 28 views
0

我的正則表達式是Java的正則表達式 - Ilegal重複字符

(?:--|#|\/\*|{) 

當我編譯這個使用Pattern.complie()在Java中,我得到* 非法重複的特徵*

我測試了這個正則表達式

(a|\/\*|b) 

當我編譯這個,它顯示沒有錯誤。

爲什麼會發生這種情況?

+2

難道不是因爲''{?它用於指定應該重複多少次。我會嘗試它逃脫:'(?: - |#| \/\ * | \ {)' –

+0

@GáborBakos這應該是一個答案,而不是一個評論:) – Pshemo

+0

這不是一個真正的正則表達式...是它? –

回答

2

它是because of {。它用於指定應該重複多少次。例如x{2,4}將匹配x重複2(xx),3(xxx)或4(xxxx)次。

如果你想正則表達式匹配{文字,它需要進行轉義:

(?:--|#|\/\*|\{) 
+0

通常你不需要轉義'{'如果後面跟着一個數字和一個'}'......它可以解決這個問題,因爲我不知道Java的特殊性:不同的風味,不同的實現。 – Robin

+1

@Robin:是的,Java總是把'{'當作一個量詞的開始,把'['當作一個字符類的開始。事實上,爲了支持其非同尋常的交集功能('&&'),'[''在字符類中保留了這個意思*。 –