我有以下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);
}
打印:The value of 'matches' is: false
为什么我的var
与正则表达式匹配?如果我正确阅读正则表达式,它会匹配任何字符串:
字符串" ROOT_CONTEXT_MATCHER
":
这里发生了什么?!?
答案 0 :(得分:2)
问题在于正则表达式开头和结尾处的正斜杠字符。它们在这里没有任何特殊含义,被视为文字。只需删除它们就可以修复它:
boolean matches = var.matches("[A-Z][a-zA-Z0-9_]*");
如果您打算使用元字符进行边界匹配,则行的开头为^
,行的末尾为$
:
boolean matches = var.matches("^[A-Z][a-zA-Z0-9_]*$");
虽然这里不需要这些,因为String#matches
会匹配整个字符串。
答案 1 :(得分:0)
您需要从Java正则表达式中删除正则表达式分隔符,即/
:
boolean matches = var.matches("[A-Z][a-zA-Z0-9_]*");
可以进一步缩短到:
boolean matches = var.matches("[A-Z]\\w*");
由于\\w
相当于[a-zA-Z0-9_]
(单词字符)