码迷,mamicode.com
首页 > 编程语言 > 详细

廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配

时间:2019-04-23 09:27:07      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:compile   print   17.   image   结果   编译   regex   int   tcl   

匹配电话号码
技术图片
匹配成功后,如果提取想要的字符串
使用(...)可以分组:"^(\d{3,4})\-(\d{6,8})$"
技术图片
技术图片

String.matcher vs Pattern.matcher

    public static void main(String[] args){
        String regex = "^\\d{3,4}\\-\\d{6,8}";
        System.out.println("010-123456789".matches(regex));

        Pattern pattern = Pattern.compile("^(\\d{3,4})\\-(\\d{6,8})$");
        Matcher matcher = pattern.matcher("010-12345678");
        System.out.println(matcher.matches());
        System.out.println(matcher.group(1)+"\t"+matcher.group(2));
    }

技术图片

反复使用一个正则表达式字符串进行快速匹配效率较低:

  • 正则表达式虽然是一个字符串,但首先要编译为Pattern对象 ,然后再进行匹配。因此可以先创建Pattern对象,然后反复使用
    public static void main(String[] args){
        Pattern pattern = Pattern.compile("^(\\d{3,4})\\-(\\d{6,8})$");
        //获取匹配结果
        System.out.println(pattern.matcher("010-12345678").matches());
        System.out.println(pattern.matcher("021-123456").matches());
        System.out.println(pattern.matcher("022#1234567").matches());
        //获取matcher对象,在获取匹配结果
        Matcher matcher = pattern.matcher("010-1234567");
        System.out.println(matcher.matches());
    }
}

技术图片

使用Matcher.group(n)可以快速提取字串

    public static void main(String[] args) throws IllegalAccessException {
        Pattern pattern = Pattern.compile("^(\\d{3,4})\\-(\\d{6,8})$");
        //获取matcher对象
        Matcher matcher = pattern.matcher("010-1234567");
        //必须匹配成功,才能提取子串,即matcher.matches()不能省略,否则会报java.lang.IllegalStateException,
        try{
            System.out.println(matcher.group(0));
        }catch (Exception e){
            System.out.println(e.getClass()+": "+e.getMessage());
        }
        //因此可以改写为
        if (matcher.matches()) {
            System.out.println(matcher.group(0));
            System.out.println(matcher.group(1));
            System.out.println(matcher.group(2));
        }
    }

技术图片

总结:
正则表达式分组可以通过Matcher对象快速提取字串:
group(0)
group(1)
group(2)
...

廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配

标签:compile   print   17.   image   结果   编译   regex   int   tcl   

原文地址:https://www.cnblogs.com/csj2018/p/10754354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!