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

很多正则引擎都支持命名分组,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

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

(0)

相关推荐

  • java正则表达式提取数字的方法实例

    复制代码 代码如下: @Test    public void test33() {        String phoneString = "哈哈,13888889999";        // 提取数字        // 1        Pattern pattern = Pattern.compile("[^0-9]");        Matcher matcher = pattern.matcher(phoneString);        Strin

  • Java常用正则表达式验证工具类RegexUtils.java

    正则表达式常常用来验证各种表单,Java 表单注册常用正则表达式验证工具类,常用正则表达式大集合. 1. 电话号码 2. 邮编 3. QQ 4. E-mail 5. 手机号码 6. URL 7. 是否为数字 8. 是否为中文 9. 身份证 10. 域名 11. IP .... 常用验证应有尽有! 这的确是您从事 web 开发,服务器端表单验证之良品!你,值得拥有 ^_^ /* * Copyright 2012-2013 The Haohui Network Corporation */ pack

  • JAVA正则表达式 Pattern和Matcher

    1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字

  • Java 正则表达式匹配模式(贪婪型、勉强型、占有型)

    Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 "<.+>" 去匹配 "a<tr>aava </tr>abb",也许你所期待的结果是想匹配 "<tr>",但是实际结果却会匹配到 "<tr>aava </tr>. 在 Greediness 的模式下,会尽量大范围的匹配,直到匹配了整个内容,这时发现匹配不能成功时,开始回退

  • Java使用正则表达式对注册页面进行验证功能实现

    本文给大家介绍java使用正则表达式对注册页面进行验证的代码,代码如下所示: package regex; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class registered { public static void main(String[] args) { //注册用户 Scanner sc=new Scanner(System.in

  • java常用正则表达式

    "^/d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-/d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?/d+$" //整数 "^/d+(/./d+)?$" //非负浮点数(正浮点数 + 0) "^(([0-9]+/.[0-9]*[1-9][0-

  • Java基于正则表达式获取指定HTML标签指定属性值的方法

    本文实例讲述了Java基于正则表达式获取指定HTML标签指定属性值的方法.分享给大家供大家参考,具体如下: 有时可能会有这样的需求,从HTML页面获取指定标签的指定属性值,可以通过第三方库解析来获取,但是这样相对比较麻烦! 如果使用正则表达式,那么就变得简单了.代码如下: package com.mmq.regex; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import

  • java正则表达式获取指定HTML标签的指定属性值且替换的方法

    实例如下: public static String repDomain(String source, String domain, String element, String attr) { String img = ""; Pattern p_image; Matcher m_image; String regEx_img = "<" + element + "[^<>]*?\\s" + attr + "=['\

  • java正则表达式四种常用的处理方式(匹配、分割、替代、获取)

    java 正则表达式高级篇,介绍四种常用的处理方式:匹配.分割.替代.获取,具体内容如下 package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 正则表达式 * 正则表达式 的用法主要是4种方面的使用 * 匹配,分割,替换,获取. * 用一些简单的符号来代表代码的操作 * @author cyc * */ public class Rex { public static void ma

  • 详解Java判断是否是整数,小数或实数的正则表达式

    经常会遇到这样的情况,需要判断一个字符串是否是一个合法的数,包括整数,小数或者实数. 网上查到很多文章大多是判断这个字符串是否全为数字,比如下面这段来自StringUtils的代码,可以看到,13.2这样的数字实际上会返回false,可是,他的确是一个数字. public static boolean isNumeric(String str) { if (str == null) { return false; } int sz = str.length(); for (int i = 0;

  • Java 正则表达式学习总结和一些小例子

    从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher. Pattern是一个正则表达式经编译后的表现模式. 在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特定的String那样简单

  • Java正则表达式处理特殊字符转义的方法

    正则需要转义字符 '$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|' 异常现象: java.util.regex.PatternSyntaxException: Dangling meta. character '*' near index 0 解决方法 对特殊字符加\\转义即可. 注意:虽然使用[]在部分条件下也可以,但是在对于(.[.{范围边界开始符不匹配的情况下会报如下: 异常现象 java.util.

随机推荐