加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:32:35 所属栏目:Java 来源:网络整理
导读:我在 Java中有一个正则表达式的奇怪问题.我测试了我的正则表达式和我的价值 here,它的工作原理.它说有3组(正确)第一组(不是组零!)的匹配是SSS,组2的匹配是BB,组3的匹配是0000.但是我的代码下面失败了,我相当一个亏损为什么… String pattern = "([^-]*)-([
我在 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():

参考文献:

> Matcher#find()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读