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

java – 正则表达式:使用System.out.println(m.matches())时不

发布时间:2020-12-15 02:22:29 所属栏目:Java 来源:网络整理
导读:我执行以下代码: public static void test() { Pattern p = Pattern.compile("BIP[0-9]{4}E"); Matcher m = p.matcher("BIP1111EgjgjgjhgjhgjgjgjgjhgjBIP1234EfghfhfghfghfghBIP5555E"); System.out.println(m.matches()); while(m.find()) { System.out.p
我执行以下代码:

public static void test() {
 Pattern p = Pattern.compile("BIP[0-9]{4}E");

 Matcher m = p.matcher("BIP1111EgjgjgjhgjhgjgjgjgjhgjBIP1234EfghfhfghfghfghBIP5555E");
 System.out.println(m.matches());
 while(m.find()) {
  System.out.println(m.group());
 }

}

我无法解释的是当使用System.out.println(m.matches())执行代码时;印刷的比赛是:BIP1234E和BIP5555E.
但是当System.out.println(m.matches());从代码中删除了matche BIP1111E也被打印出来.

有人可以解释一下这有可能吗? Thnx给了你很多帮助.

解决方法

Java中的Matcher维护给定字符串中已找到组的索引.

例如,在您的示例中提供的字符串中 – BIP1111EgjgjgjhgjhgjgjgjgjhgjBIP1234EfghfhfghfghfghBIP5555E

共有3组与模式匹配

BIP1111E
BIP1234E
BIP5555E

当创建匹配器时,它从索引0开始.当我们使用m.find()迭代匹配器时,每次找到模式时它都会标记找到的模式的索引位置.

例如,第一个gourp位于字符串的开头 – 即从0开始并一直到字符串的第7个(基于0的索引)字符.下次我们说find()它从第8个字符开始,找到模式的下一个匹配.

m.matches尝试匹配整个字符串,它还操纵内部索引.

当你在使用m.find()进行迭代之前调用m.matches()时,索引将从初始值0移开.因此,如果调用m.matches(),则跳过第一组BIP1111E

(编辑:李大同)

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

    推荐文章
      热点阅读