为什么`\ .`不是java正则表达式

时间:2016-11-14 11:25:09

标签: java regex

在构建stock watcher的GWT教程中,有一个正则表达式来检查输入是否有效:

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

允许输入 1到10个数字,字母或点之间的字符。

令我困惑的部分是\\.

我将此解释为转义反斜杠\\,然后将.解释为任何字符。我认为正确的表达式是\.来逃避点,但这样做会导致eclipse Invalid escape sequence中的正则表达式错误。

我在这里错过了明显的吗?

2 个答案:

答案 0 :(得分:4)

这是Java中正则表达式的麻烦之一。 \\ 是正则表达式级别的转义反斜杠,只是在字符串级别。

此字符串:

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

定义此正则表达式:

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

...因为字符串文字消耗了转义。

答案 1 :(得分:1)

\是Java String Literal中的转义符号。例如,换行符被写为\n。为了在Java字符串中放置一个普通的\,可以使用\\来完成。

所以你的Java String文字(代码中的字符串):"^[0-9A-Z\\.]{1,10}$"是用于正则表达式"^[0-9A-Z\.]{1,10}$"的实际字符串(带有一个斜杠)。正如您所期望的那样,正则表达式中为\.