正则表达式在java中的使用
包名:java.util.regex
类名:Pattern(编译正则表达式)、Matcher(校验正则表达式)
方法:
1、Pattern p = Pattern.complile(String regex);参数为正则字符串,返回值为Pattern对象
2、String regex = p.pattern(); 返回正则字符串
3、String [] strArray = Pattern.split(CharSequence input);参数为需要匹配的字符串,该方法会按照正则字符串对需要匹配的字符串进行分组,分组后的数组中,不包含正则匹配的字符串,类似String.split(String regex),
实例:
Pattern pattern=Pattern.compile(“\d+”);
String[] str=pattern.split(“我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com”);
结果:str[0]=”我的QQ是:” str[1]=”我的电话是:” str[2]=”我的邮箱是:aaa@aaa.com”
4、boolean b = Pattern.matcher(String regex,CharSequence input);一个静态方法,用来快速匹配字符串
5、boolean b = pattern.matcher(CharSequence input);用Pattern对象来匹配字符串,适合一处正则需要在多处匹配的情况下
6、Matcher.matches()/ Matcher.lookingAt()/ Matcher.find(),其中matches()对整个字符串进行匹配,成功返回true,lookingAt()只有匹配到的字符串在最前面才成功返回true,find()匹配到的字符串可以在任何位置,成功返回true,
7、5.Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串
8、start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组
Pattern p=Pattern.compile("([a-z]+)(\\d+)");
Matcher m=p.matcher("aaa2223bb");
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串
例子:
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");
while(m.find()) {
System.out.println(m.group());
}
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 “(x)(y\w*)(z)” 中,存在三个这样的组:
1. x
2. y\w*
3. z
如果没有括号,则没有组,既组的数量是零
输出
456456
0532214
123
补充:
每次执行匹配操作后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串的信息,以及它们的重载方法,也会改变成相应的信息.
注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用.