为什么这个Java正则表达式不起作用?
我正在尝试匹配由以下内容组成的任何字符串:
- 任何1个字符以上的字母数字字符串;然后
- 两个时期(
".."
);然后 - 任何1个字符以上的字母数字字符串
例如:
mydatabase..mytable
anotherDatabase23..table28
等等
鉴于以下功能:
public boolean isValidDBTableName(String candidate) {
if(candidate.matches("[a-zA-Z0-9]+..[a-zA-Z0-9]+"))
return true;
else
return false;
}
将值"mydb..tablename"
传递给此函数会使其返回false
。为什么?提前谢谢
# 1 楼答案
正如NeplatnyUdaj在评论中指出的,您当前的正则表达式应该为输入
"mydb..tablename"
返回true
但是,您的正则表达式存在过度匹配的问题,它返回
true
作为无效名称,例如nodotname
您需要转义
.
,因为在Java正则表达式中,it will match any character except for line separators:在正则表达式中,可以使用
\
转义元字符(具有特殊含义的字符)。要在字符串文本中指定\
,需要再次对其进行转义# 2 楼答案
必须在正则表达式中转义句点。由于
\
也必须转义,因此# 3 楼答案
我刚刚在Eclipse中尝试了你的正则表达式,它起了作用。或者至少没有失败。尝试剥离空白字符