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,为什么要用到子模式呢?这是为了能在一次匹配中找出关心部分,例如:?测试代码:
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