我在
Java中有一个正则表达式的奇怪问题.我测试了我的正则表达式和我的价值
here,它的工作原理.它说有3组(正确)第一组(不是组零!)的匹配是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():
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对象,它能够匹配你的值.为了实际扫描输入,您需要使用find()或lookingAt():
参考文献: