在JDK7 b50中将实现正则表达式命名捕获组

开发 后端
在JDK7 b50中将实现正则表达式命名捕获组这是很多Javaer期待的事情那么在JDK7 b50中将实现正则表达式命名捕获组具体是哪些呢?本文将向你简单介绍。

在JDK7 b50中将实现正则表达式命名捕获组是众望所归,目前Java的正则表达式不支持命名捕获组功能,只能通过捕获组的计数来访问捕获组。当正则表达式比较复杂的时候,里面含有大量的捕获组和非捕获组,通过从左至右数括号来得知捕获组的计数也是一件很烦人的事情;而且这样做代码的可读性也不好,当正则表达式需要修改的时候也会改变里面捕获组的计数。

解决这个问题的方法是通过给捕获组命名来解决,就像Python, PHP, .Net 以及Perl这些语言里的正则表达式一样。这个特性javaer已经期待了很多年,而现在我们终于在jdk7 b50得到了实现。

新引入的命名捕获组支持如下:

◆(?X) to define a named group NAME"

◆\k to backref a named group "NAME"

◆<$ to reference to captured group in matcher's replacement str

◆group(String NAME) to return the captured input subsequence by the given "named group"
 

在JDK7 b50中实现正则表达式命名捕获组之后你可以像这样使用正则式:

  1. String pStr = "0x(?\\p{XDigit}{1,4})\\s++u\\+(?\\p{XDigit}{4})(?:\\s++)?";  
  2.  
  3. Matcher m = Pattern.compile(pStr).matcher(INPUTTEXT);  
  4.  
  5. if (m.matches()) {  
  6.  
  7. int bs = Integer.valueOf(m.group("bytes"), 16);  
  8.  
  9. int c = Integer.valueOf(m.group("char"), 16);  
  10.  
  11. System.out.printf("[%x] -> [%04x]%n", bs, c);  
  12.  
  13. }  
  14.  
  15. String pStr = "0x(?\\p{XDigit}{1,4})\\s++u\\+(?\\p{XDigit}{4})(?:\\s++)?";  
  16.  
  17. Matcher m = Pattern.compile(pStr).matcher(INPUTTEXT);  
  18.  
  19. if (m.matches()) {  
  20.  
  21. int bs = Integer.valueOf(m.group("bytes"), 16);  
  22.  
  23. int c = Integer.valueOf(m.group("char"), 16);  
  24.  
  25. System.out.printf("[%x] -> [%04x]%n", bs, c);  
  26.  

或者

  1. System.out.println("0x1234 u+5678".replaceFirst(pStr, "u+$ 0x$")); 

在JDK7 b50中实现正则表达式命名捕获组之后怎么样呢?是不是眼睛一亮呢?

【编辑推荐】

  1. 实现Java中对象比较的两个方法
  2. 初学Java多线程:使用Synchronized块同步方法
  3. 初学Java多线程:从线程返回数据的两种方法
  4. Java中两个特殊变量this和super 的使用
  5. 3.6.3 this关键字和构造方法的调用
责任编辑:仲衡 来源: diyjava
相关推荐

2009-03-12 10:15:15

正则表达式JDK7Java

2009-09-16 17:38:49

正则表达式匹配任意字符

2009-09-16 18:19:34

正则表达式组

2009-08-20 13:44:07

C#正则表达式

2009-06-15 17:24:59

Groovy正则表达式

2010-03-25 18:25:36

Python正则表达式

2012-05-08 13:29:01

VB

2009-09-16 12:41:42

Perl正则表达式

2018-09-27 15:25:08

正则表达式前端

2020-09-04 09:16:04

Python正则表达式虚拟机

2009-09-16 14:32:43

PHP正则表达式替换

2011-08-16 17:34:08

iPhone开发RegexKitLit正则表达式

2009-03-16 14:01:24

正则表达式函数SQL

2009-09-16 17:15:57

正则表达式引擎

2016-11-10 16:21:22

Java 正则表达式

2022-01-04 11:35:03

Linux Shel正则表达式Linux

2023-09-13 08:12:45

2009-09-16 13:14:10

Ereg正则表达式

2020-11-04 09:23:57

Python

2011-08-23 17:46:09

LUA正则表达式模式
点赞
收藏

51CTO技术栈公众号