在构建stock watcher的GWT教程中,有一个正则表达式来检查输入是否有效:
if (!symbol.matches("^[0-9A-Z\\.]{1,10}$"))
允许输入 1到10个数字,字母或点之间的字符。
令我困惑的部分是\\.
我将此解释为转义反斜杠\\
,然后将.
解释为任何字符。我认为正确的表达式是\.
来逃避点,但这样做会导致eclipse Invalid escape sequence
中的正则表达式错误。
我在这里错过了明显的吗?
答案 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}$"
的实际字符串(带有一个斜杠)。正如您所期望的那样,正则表达式中为\.
。