2016-11-14 84 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}$"(使用单斜杠)的实际字符串。所以如你所料,这是正则表达式中的\.

相关问题