Java Regex:matches(pattern,value)返回true但group()无法匹配
我在Java中使用正则表达式有一个奇怪的问题。 我在这里测试了我的正则表达式和我的价值而且它有效。 它说有3组(正确)第一组(不是第0组!)的匹配是SSS,第2组的匹配是BB,第3组的匹配是0000.但我的代码在下面失败,我在为什么……
String pattern = "([^-]*)-([\\D]*)([\\d]*)"; String value = "SSS-BB0000"; Matcher matcher = Pattern.compile(pattern).matcher(value); //group() is equivalent to group(0) - it fails to match though matcher.group();
以下是上述网站的匹配结果截图:
如果有人能指出我犯的错误,我真的很感激…另外一点:奇怪的是,如果我执行以下代码,则返回true,这意味着匹配应该是可能的……
//returns true Pattern.matches(pattern, value);
你需要在group()
之前调用find()
group()
:
String pattern = "([^-]*)-([\\D]*)([\\d]*)"; String value = "SSS-BB0000"; Matcher matcher = Pattern.compile(pattern).matcher(value); if (matcher.find()) { System.out.println(matcher.group()); // SSS-BB0000 System.out.println(matcher.group(0)); // SSS-BB0000 System.out.println(matcher.group(1)); // SSS System.out.println(matcher.group(2)); // BB System.out.println(matcher.group(3)); // 0000 }
当您调用matcher(value)
,您只是创建一个能够匹配您的value
的Matcher
对象。 为了实际扫描输入,您需要使用find()
或lookingAt()
:
参考文献:
-
Matcher#find()