我在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();
Run Code Online (Sandbox Code Playgroud)
以下是上述网站的匹配结果截图:

如果有人能指出我犯的错误,我真的很感激...另外一点:奇怪的是,如果我执行以下代码,则返回true,这意味着匹配应该是可能的......
//returns true
Pattern.matches(pattern, value);
Run Code Online (Sandbox Code Playgroud)
Joã*_*lva 27
你需要调用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
}
Run Code Online (Sandbox Code Playgroud)
当你调用时matcher(value),你只是创建一个Matcher能够匹配你的对象value.为了实际扫描输入,您需要使用find()或lookingAt():