java - 为什么这个 Java 正则表达式不起作用?

标签 java regex string

我正在尝试匹配任何包含以下内容的字符串:

  1. 任何 1 个以上字符的字母数字字符串;然后
  2. 两个句号("..");然后
  3. 任何 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/

相关文章:

java - 将所有java输出写入txt文件中

java - VB.NET Web 服务客户端访问 Java Web 服务 - 连接中止

python - 简化正则表达式

R:删除字符串中的部分单词

php - 存储字符串时 Php 变量的大小限制是多少?

python - Python,Eclipse中正则表达式字符串的pep8警告

c - 用字符串的一部分填充二维数组

java - 谷歌应用程序引擎中的实体组到底是什么?

python - 将字符串拆分为字符和数字并存储在 map Python 中

java - 在同一对象中使用其他方法的 JUnit 测试方法