`

Java处理正则表达式

    博客分类:
  • Java
阅读更多

Java本身的Util包里面就有提供处理正则表达式的工具类,当然还有很多第三方正则表达式处理包,反正到目前为止,用java.util.regex就已经能满足我的需求了。示例如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Hello {
	public static void main(String[] args) {
		String regEx = "[0-9]{6}";//正则表达式 
		String html = "124595#123456123";//要检查匹配的字符串
		Pattern p = Pattern.compile(regEx);     
		Matcher m = p.matcher(html);
		System.out.println(""+m.groupCount());
		while(m.find()){ 
		    System.out.println(m.group()+" "+m.start()+" "+(m.end()-1));       
		}      	  
	}
}

 

 打印结果如下:

0
124595 0 5
123456 7 12

 这里的问题是groupCount为什么是0。group()、group(i)、groupCount到底指的是什么,网上普遍的解释:

http://hi.baidu.com/personnel/item/2a7eebbf5ccb61422bebe352 写道

 

首先弄明白Java的正则表达式中捕获组的概念,也就是以括号对“()”分割出的子Pattern,为什么要用到子模式呢?这是为了能在一次匹配中找出关心部分,例如:
input: abbc
pattern:a(b*)c
group0: a(b*)c
group1:(b*)

整个pattern是可以匹配abbc的,group()方法就是获得当前查找里面整个pattern所匹配的子序列,所以你可以通过group()找到“abbc”。

与此同时,我还对其中的b的个数感兴趣,就可以通过group1来得到关于(b*)的匹配情况,group(i)就是获得当前查找里面指定的捕获组所匹配的子序列,所以你可以通过group(0)来找到“bb”。

上面说清楚了,groupCount()的含义就很容易明白了,它并不是指在输入序列中Pattern总共匹配了多少次,而是指的捕获组的个数,当然它不对“整个pattern”计数,而只对“子Pattern”计数,如上例中groupCount()返回1,而如果我们将input改为“abbc abbc abbc”,——有三次匹配——groupCount()还是返回1。

 测试代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Hello {
	public static void main(String[] args) {
		String regEx = "t(\\d{0,3})n";//正则表达式 
		String html = "12t32nst567n";//要检查匹配的字符串
		Pattern p = Pattern.compile(regEx);     
		Matcher m = p.matcher(html);
		System.out.println(""+m.groupCount());
		while(m.find()){ 
		    System.out.println(m.group()+" "+m.start()+" "+(m.end()-1));  
		    System.out.println(m.group(1));
		}      	  
	}
}

 

 表达式查找t和n之间包含0到3个数字的字符串,结果为:

1
t32n 2 5
32
t567n 7 11
567

 可以看到groupCount为1了,同时可以看到group(i),i从1开始代表()内的子表达式,0代表的是整个表达式。

 

正则表达式的语法规则网上有很多,这篇不错:

http://fineboy.cnblogs.com/archive/2005/09/08/232410.html

分享到:
评论

相关推荐

    常用java正则表达式

    本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Apache...

    JAVA 正则表达式 教程

    正则表达式善于处理文本,对匹配、搜索和替换等操作都有意想不到的作用。正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率。 正则表达式应用于程序设计语言中,...

    java中的正则表达式

    JAVA正则表达式4种常用功能 正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 文章主要介绍Java中常用正则表达式的写法

    正则表达式经典实例

    对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。...

    java超时代码处理:以正则表达式设置超时时间为例

    java超时取消正则表达式匹配方法,代码超时处理,设置代码执行时间,超棒的工具类 lambda,Callable,ExecutorService,超过执行5秒退出

    java正则表达式经典实例

    正则表达式到底是什么东西? 字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则...

    java常用正则表达式 和 java 正则表达式详解 csdn 下载

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    精通正则表达式 中英文

    正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB.NET和c#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。...

    java正则表达式.docx

    本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Apache...

    强大的JAVA正则表达式处理包jakarta-oro

    强大的JAVA正则表达式处理包jakarta-oro

    Java正则表达式详解

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    《正则表达式经典实例》扫描版

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

    精通正则表达式(第三版)

    如今,正则表达式已经成为众多语言及工具--Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何语言)--中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。...

    精通正则表达式(第三版)

    正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。...

    java_正则表达式

    java 正则表达式详解 先简要地介绍正则表达式的入门知识,然后以Jakarta-ORO API为例介绍如何使用正则表达式。 正则表达式处理文本和匹配模式

    java 正则表达式 详细讲义

    java 正则表达式 详细讲义 文本处理 文本检索 都需要用到

    正则表达式完整高清版

    《正则指引》针对作者在开发中遇到的实际问题,以及其他开发... 《正则指引》适合经常需要进行文本处理(比如日志分析或网络运维)的技术人员、熟悉常用开发语言的程序员,以及已经对正则表达式有一定了解的读者阅读。

Global site tag (gtag.js) - Google Analytics