每天一点正则表达式积累(五)

        /**
         * matches用于匹配整个字符,find找子串,其中find方法调用之后,
         * 可调用Matcher的toString方法,返回的字符串中
         * 的lastmatch来检查哪些子串获得匹配字
         * ,不过最简单的方法是调用group(),注意reset的影响,lookingAt每次从头找
         * 注意start和end方法必须能找到,才有返回值,否则就报错了
         */
        //这是Pattern典型的调用顺序是 
        Pattern p = Pattern.compile("\\d{3,5}");//表示三到五个数字
        String s = "123-34345-234-00";
        Matcher m = p.matcher(s);
        p(m.matches());//false
        //重置匹配器。
        m.reset();
        p(m.find());//true尝试查找与该模式匹配的输入序列的下一个子序列或者子串比如123 调用toString查看哪一个匹配了
        p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=123]注意lastmacth = 123
        p(m.group());//123
        p(m.start() + "-" + m.end());//由于end返回最后匹配字符之后的偏移量。 所以结果是0-3而不是0-2下面同理
        p(m.find());//true 为34345
        p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=34345]注意lastmatch=34345
        p(m.group());//34345
        p(m.start() + "-" + m.end());//4-9
        p(m.find());//true 234匹配
        p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=234]注意lastmatch=234
        p(m.group());//234
        p(m.start() + "-" + m.end());//10-13
        p(m.find());//false 00不匹配
        p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=]注意lastmatch=
        p(m.start() + "-" + m.end());//此时报错,因为没有匹配的子串了
        /**
         * 经过上面运行结果可以发现,可以用下面的来查看有多少子串获得匹配,非常简洁
         * 输出是
         * 123
         *34345
         *234
         */
        while (m.find()) {
            p(m.group());
        }
//        lookingAt()尝试将从区域开头开始的输入序列与该模式匹配。 每次找都是从开始找,所以下面的都是true   
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
//        replacement
//        启用不区分大小写的匹配。
        Pattern p1 = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        Matcher m1 = p1.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
        StringBuffer buf = new StringBuffer();
        int i = 0;//计算有几个匹配值
        /**
         *  appendReplacement(StringBuffer sb,//sb - 目标字符串缓冲区。
                                 String replacement)把符合匹配的字符子串用replacement后,结果存入buf中
         */
        while (m1.find()) {
            i++;
            if (i % 2 == 0) {
                m1.appendReplacement(buf, "java");
            } else {
                m1.appendReplacement(buf, "JAVA");
            }
        }
        m1.appendTail(buf);//如果不加此句p(buf)输出为JAVA java JAVA java IloveJAVA you hatejava
        p(i);//6
        p(buf);//加了 m1.appendTail(buf);后的输出JAVA java JAVA java IloveJAVA you hatejava afasdfasdf
public static void p(Object o) {
        System.out.println(o);
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭梧悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值