我有以下 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/