2016-11-14 55 views
0

序列在GWT教程,你建一個stock watcher有這個正則表達式的表達式,以檢查是否輸入是有效的:爲什麼` .`不是一個有效的逃生Java中的正則表達式

if (!symbol.matches("^[0-9A-Z\\.]{1,10}$")) 

這允許輸入1到10個字符,數字,字母或點。

,混淆我是\\.

我將此解釋爲轉義反斜線\\然後.它代表任意字符的一部分。而且我認爲正確的表達方式是\.來避開點,但這樣做會導致eclipse Invalid escape sequence中的正則表達式錯誤。

我錯過了這裏的明顯嗎?

+2

這是一個字符串文字 - 你需要在實際字符串中使用反斜線,所以你需要爲普通的Java字符串文字轉義。忽略正則表達式:只是'String x =「\。」;'不是有效的Java代碼。 –

+0

至少相關:http://stackoverflow.com/questions/18503280/how-to-represent-backslash –

+0

哦......好吧,有點明顯。謝謝! – Philipp

回答

4

這是Java中正則表達式的麻煩之一。那\\而不是在正則表達式級別,只在字符串級別轉義反斜槓。

此字符串:

"^[0-9A-Z\\.]{1,10}$" 

定義正則表達式:

^[0-9A-Z\.]{1,10}$ 

...因爲逃跑是由字符串字面消耗。

1

\是Java字符串中的轉義符號。例如換行符被寫爲\n。爲了在Java字符串中放置正常的\,這通過使用\\來完成。

因此,您的Java String文字(代碼中的字符串):"^[0-9A-Z\\.]{1,10}$"是用於正則表達式"^[0-9A-Z\.]{1,10}$"(使用單斜槓)的實際字符串。所以如你所料,這是正則表達式中的\.

相關問題