Java处理正则表达式_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java处理正则表达式

Java处理正则表达式

 2013/9/5 15:14:51  tonlion2046  程序员俱乐部  我要评论(0)
  • 摘要:Java本身的Util包里面就有提供处理正则表达式的工具类,当然还有很多第三方正则表达式处理包,反正到目前为止,用java.util.regex就已经能满足我的需求了。示例如下:importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassHello{publicstaticvoidmain(String[]args){StringregEx="[0-9]{6}"
  • 标签:Java 正则表达式 表达式 正则

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

class="java">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

上一篇: 苹果为何在中国单独办发布会? 下一篇: 没有下一篇了!
发表评论
用户名: 匿名