我正在尝试匹配任何包含以下内容的字符串:
- 任何 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
。为什么?提前致谢!
最佳答案
正如 NeplatnyUdaj 在评论中指出的那样,您当前的正则表达式应该为输入 "mydb..tablename"
返回 true
。
但是,您的正则表达式存在过度匹配的问题,它会为无效名称(例如 nodotname
)返回 true
。
您需要转义 .
,因为在 Java 正则表达式中,it will match any character except for line separators :
"[a-zA-Z0-9]+\\.\\.[a-zA-Z0-9]+"
在正则表达式中,您可以使用 \
转义元字符(具有特殊含义的字符)。要在字符串字面量中指定\
,需要再次转义。
关于java - 为什么这个 Java 正则表达式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301859/