Java Regex:matches(pattern,value)返回true但group()无法匹配

时间:2011-08-11 21:28:07

标签: java regex

我在Java中使用正则表达式有一个奇怪的问题。我测试了我的正则表达式和我的值here并且它有效。它说有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();

以下是上述网站的匹配结果截图: enter image description here

如果有人能指出我犯的错误,我真的很感激...另外一点:奇怪的是,如果我执行以下代码,则返回true,这意味着匹配应该是可能的...... < / p>

//returns true
Pattern.matches(pattern, value);

2 个答案:

答案 0 :(得分:26)

您需要在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)时,您只需创建一个能够匹配Matcher的{​​{1}}对象。要实际扫描输入,您需要使用valuefind()

参考文献:

答案 1 :(得分:0)

我遇到了同样的问题。正在致电matcher.group(1) 没有,正在检查matcher.find()。添加是否检查matcher.find()可以解决问题。