分享

Java正则表达式应用小结

 印度阿三17 2018-11-28

 案例:
 Pattern p = Pattern.compile("a*b"); // 生成Pattern实例(设置匹配模式【规则】)- 静态方法
 Matcher m = p.matcher("aaaaab");    // 生成Match实例(设置匹配选手【报名】)
 boolean b = m.matches();            // 匹配选手按匹配模式进行匹配操作【全部】-属简单用法
 等价于:
 boolean b = Pattern.matches("a*b", "aaaaab"); // 静态方法 -属简单用法

 总结:   
 Pattern.compile(regex).matcher(input).matches() // 案例的链式写法 -属简单用法
 等价于:  
 Pattern.matches(regex, input); // 静态方法-属简单用法
 
【两个层面】:
一、Pattern层 ——> 靠Pattern.compile()方法生成

 p.pattern():获得匹配模式【规则】(正则表达式)的字符串形式
 p.split(input):用p匹配模式分割input字符串,返回字符串数组
 
 简单用法:Pattern.matches(regex, input); // 静态方法

二、Matcher层 ——> 依赖于Pattern层而存在,靠p.matcher()方法生成

 m.pattern():获得匹配模式【规则】(正则表达式)的字符串形式  

 m.matches():对匹配选手(整个字符串)进行完全匹配[简单用法] ——> 返回布尔值
 【若开头部分能匹配成功,指针将移动至开头,但不能获取结果,匹配失败则不移动索引指针】
 m.lookingAt():始终只对匹配选手开头部分的字符串进行匹配 ——> 返回布尔值
 【若开头部分能匹配成功,指针将移动至开头,但能获取结果,匹配失败则不移动索引指针】
 m.find():对字符串按索引指针位置进行迭代匹配 ——> 返回布尔值
 【每次匹配成功都会移动索引指针至最近一次匹配成功的开头,能拿到匹配结果,匹配失败则不移动索引指针】

 m.start():返回最近一次匹配的初始索引
 m.end():返回最近一次匹配的结束索引
 m.group():返回最近一次匹配的子字符串
 
   如果有分组,那么:
   m.groupCount():返回p匹配模式中的分组总数
   m.start(i):返回最近一次匹配的第i个分组的初始索引
   m.end(i):返回最近一次匹配的第i个分组的结束索引
   m.group(i):返回最近一次匹配的第i个分组的子字符串
 

 


举例如下:



        System.out.println("加载配置信息");
        System.out.println("通过加载配置信息加载一个代理工厂Map:");
        System.out.println("这个Map存放的是接口Class与对应的代理工厂");
        MyInterface myInterface = new SqlSession().getMapper(MyInterface.class);
        List<Object> list = myInterface.query(new Object());
        System.out.println(list.size());
        Pattern p = Pattern.compile("\\d ");
        System.out.println(p.pattern());
        System.out.println(p.toString());
        System.out.println(p.flags());
        System.out.println(" ");
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee").length);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[0]);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[1]);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[2]);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[3]);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[4]);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[5]);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[6]);
        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[7]);
//        System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[8]);
        System.out.println("---------------");
        System.out.println(Pattern.matches("\\d ", "2223"));   // true
        System.out.println(Pattern.matches("\\d ", "2223aa")); // false
        System.out.println(Pattern.matches("\\d ", "22bb23")); // false
        
        Pattern p2 = Pattern.compile("\\d ");
        Matcher m2 = p2.matcher("22bb23aa56ff78hh97gg65kk98pp88");
        System.out.println(m2.pattern());     // \d
        System.out.println(m2.toString());    // java.util.regex.Matcher[pattern=\d region=0,6 lastmatch=]
        System.out.println(m2.regionStart()); // 0
        System.out.println(m2.regionEnd());   // 18
        System.out.println("============= ");
        
        System.out.println(m2.matches());     // false
//        System.out.println(m2.start());
//        System.out.println(m2.end());
//        System.out.println(m2.group());
        
        System.out.println(m2.find());        // true
        System.out.println(m2.start());       // 4
        System.out.println(m2.end());         // 6
        System.out.println(m2.group());       // 23
        
        System.out.println(m2.find());        // true
        System.out.println(m2.start());       // 8
        System.out.println(m2.end());         // 10
        System.out.println(m2.group());       // 56
        
        System.out.println(m2.find());        // true
        System.out.println(m2.start());       // 12
        System.out.println(m2.end());         // 14
        System.out.println(m2.group());       // 78
        
        System.out.println(m2.matches());     // false 由于 开头部分匹配,指针将移动至开头,但不能获取结果
        System.out.println(m2.lookingAt());   // true 由于 开头部分匹配,指针将移动至开头,但能获取结果
//        System.out.println(m2.start());       // 0
//        System.out.println(m2.end());         // 2
//        System.out.println(m2.group());       // 22
        
        System.out.println(m2.find());        // true 再次移动索引指针
        System.out.println(m2.start());       // 4
        System.out.println(m2.end());         // 6
        System.out.println(m2.group());       // 23
        
        System.out.println(m2.find());        // true
//        System.out.println(m2.start());       
//        System.out.println(m2.end());         
//        System.out.println(m2.group());
        
        System.out.println("=============>>>>>");
        Pattern p3 = Pattern.compile("(\\d )([a-z] )");
        Matcher m3 = p3.matcher("56aaba2223bb44");
//        System.out.println(m3.matches());
        System.out.println(m3.find());
        System.out.println(m3.groupCount());
        System.out.println("*******");
        System.out.println(m3.start());
        System.out.println(m3.end());
        System.out.println(m3.group());
        System.out.println(m3.start(1));
        System.out.println(m3.end(1));
        System.out.println(m3.group(1));
        System.out.println(m3.start(2));
        System.out.println(m3.end(2));
        System.out.println(m3.group(2));
        
        System.out.println("/////////////////");
        Pattern p4=Pattern.compile("\\d ");
        Matcher m4=p4.matcher("我的QQ是:1307787223 我的电话是:18617375789 我的邮箱是:crackhu@163.com");
        while(m4.find()) {
             System.out.println(m4.group());
             System.out.print("start:" m4.start());
             System.out.println(" end:" m4.end());
        }

来源:http://www./content-1-86251.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多