Java 为什么不是';我的正则表达式是否匹配大写字符和下划线?

Java 为什么不是';我的正则表达式是否匹配大写字符和下划线?,java,regex,string,syntax,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); } 这将打印:匹配项的值为:false 为什么我的var与正则

我有以下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);
}
这将打印:
匹配项的值为:false

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

  • 以大写字符A-Z开头;然后
  • 由零个或多个组成:
    • 小写字符a-z;或
    • 大写字符A-Z;或
    • 数字0-9;或
    • 下划线
字符串“
ROOT\u CONTEXT\u MATCHER
”:

  • 以A-Z字符开始;及
  • 由19个后续字符组成,这些字符都是大写字母A-Z或下划线

这是怎么回事

您需要从Java正则表达式中删除正则表达式delimiers,即
/

boolean matches = var.matches("[A-Z][a-zA-Z0-9_]*");
可进一步缩短为:

boolean matches = var.matches("[A-Z]\\w*");

由于
\\w
相当于
[a-zA-Z0-9\]
(单词字符)

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

boolean matches = var.matches("[A-Z][a-zA-Z0-9_]*");
如果要使用元字符进行边界匹配,正确的字符是行首的
^
,行尾的
$

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

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

您的字符串不会以
/
matches开头或结尾,而是隐式地包含
^
$