• 技术文章 >Java >java教程

    java正则表达式学习笔记之命名捕获

    高洛峰高洛峰2017-01-22 14:57:48原创694
    很多正则引擎都支持命名分组,java是在java7中才引入这个特性,语法与.Net类似(.Net允许同一表达式出现名字相同的分组,java不允许)。
    命名分组很好理解,就是给分组进行命名。下面简单演示一下java中如何使用以及注意事项。

    1.正则中定义名为NAME的分组
    (?<NAME>X)
    这里X为我们要匹配的内容,注意,在这个命名不能重复,名字也不能以数字开头!

    2.反向引用NAME组所匹配到的内容
    \k<NAME>
    注意,反向引用是针对组所匹配到的内容,而非组的表达式。

    3.替换中,引用组NAME中捕获到的字符串
    ${NAME}

    4.获取NAME组捕获的字符串
    group(String NAME)
    注意:也可以使用序号对命名捕获进行引用,序号从1开始,0为正则的完整匹配结果。

    下面用一个简单的正则来分别获取年月日为例:

    String s = "2015-10-26"; 
    Pattern p = Pattern.compile("(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"); 
    Matcher m = p.matcher(s); 
    if (m.find()) { 
      System.out.println("year: " + m.group("year")); //年 
      System.out.println("month: " + m.group("month")); //月 
      System.out.println("day: " + m.group("day")); //日 
         
      System.out.println("year: " + m.group(1)); //第一组 
      System.out.println("month: " + m.group(2)); //第二组 
      System.out.println("day: " + m.group(3)); //第三组 
    } 
      
    System.out.println(s.replaceAll("(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})", "${day}-${month}-${year}")); //将 年-月-日 形式的日期改为 日-月-年 形式

    输出结果

    year: 2015
    month: 10
    day: 26
    year: 2015
    month: 10
    day: 26
    26-10-2015

    以上就是本文的全部内容,希望对大家的学习有所帮助。

    更多java正则表达式学习笔记之命名捕获相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Java使用正则表达式对注册页面进行验证功能实现 下一篇:java去掉html标签 必须首先去掉双引号的正则
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• Java中super关键字的用法详解• java的10种排序算法实例• 归纳整理Java线程面试题• Java归纳整理之IO流原理及流的分类• 实例介绍Java基于quasar实现协程池
    1/1

    PHP中文网