Java 为什么不是';我的正则表达式是否匹配大写字符和下划线?
我有以下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与正则
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开头或结尾,而是隐式地包含^
和$
。