java - 为什么我的正则表达式不匹配大写字符和下划线?

标签 java regex string syntax

我有以下 Java 代码:

public static void main(String[] args) {
    String var = "ROOT_CONTEXT_MATCHER";
    boolean matches = var.matches("/[A-Z][a-zA-Z0-9_]*/");
    System.out.println("The value of 'matches' is: " + matches);
}

打印:“matches”的值为:false

为什么我的 var 与正则表达式不匹配?如果我正确读取我的正则表达式,它会匹配任何字符串:

  • 以大写字符 A-Z 开头;那么
  • 由零个或多个组成:
    • 小写字符 a-z;或
    • 大写字符 A-Z;或
    • 数字 0-9;或
    • 下划线

字符串“ROOT_CONTEXT_MATCHER”:

  • 以 A-Z 字符开头;和
  • 由 19 个连续字符组成,全部为大写 A-Z 或下划线

这是怎么回事?!?

最佳答案

问题在于正则表达式开头和结尾的正斜杠字符。它们在这里没有任何特殊含义,被视为文字。只需删除它们即可修复:

boolean matches = var.matches("[A-Z][a-zA-Z0-9_]*");

如果您打算使用元字符进行边界匹配,则正确的字符为 ^ 表示行首,$ 表示行尾:

boolean matches = var.matches("^[A-Z][a-zA-Z0-9_]*$");

尽管这里不需要这些,因为 String#matches 将匹配整个字符串。

关于java - 为什么我的正则表达式不匹配大写字符和下划线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468627/

相关文章:

javascript - 用于检查 9 个字母单词中前两个字符必须为 "1 (numaric)-"的正则表达式,其余应为字母数字

c++ - 转义字符串中的反斜杠?

java - 在 Java 中,如何提取 URL 的域?

java - 什么时候首选 `StringBuilder` 而不是将 `String` append 到 `String` ?

string - SAS如何根据字符串将观察结果拆分为多行?

java - Apache Camel Ftp2 下载文件的顺序

java - node-java错误: libjvm.所以:无法打开共享对象文件:没有这样的文件或目录

java - 将java线程池中的线程设置为守护线程是否有任何问题

java - 将 JLabel 大小/间隙设置为 JCheckBox

javascript - 用于从 <a> 超链接中删除 jQuery 属性的正则表达式