Java之正则表达式
2012-09-03 20:46
218 查看
在web开发中,字符串的处理往往最为麻烦,处理的过程中,正则表达式用得非常频繁,最常见的如登陆校验,注册校验,以及邮箱等信息验证Pattern 类的对象是正则表达式编译后在中的表示形式,因此正则表达式的对象必须先编译为Pattern对象,然后再用Pattern对象创建Matcher对象,执行所匹配的状态封装在Matcher对象里面;多个Matcher对象可以共享一个Pattern对象,如:
上面定义的Pattern对象可以多次被使用,Pattern是不可变类,可供多个线程安全使用。
Matcher 类提供了如下常用的方法:
find:返回目标字符串是否包含与Pattern匹配的子串(每次调用都是在上一次find方法找到的匹配字符串后开始查找)。
group:返回上一次与Pattern匹配的子串。:
start:返回上一次与Pattern匹配的子串在目标字符串中开始位置。
end:返回上一次与Pattern匹配的子串在目标字符串中结束位置加1。
lookingAt:返回目标字符串前面部分与Pattern是否匹配。
matches:返回整个目标字符串是否与Pattern匹配。
reset:可一将现有的Matcher对象应用到一个新的字符序列。
下面程序演示了各个方法的用途:
运行结果:
从上面的结果可以看出,find方法依次查找字符串中与Pattern匹配的子串,一旦找到对应的子串,下次调用find方法会接着向下查找。除此之外find方法还可以传入一个带Int类型的参数,find从该int索引处向下找。
start和end主要确定子串在目标字符串中的位置如下:
输出结果:
matches 和lookingAt相似,但前者要求匹配整个字符串,后者只要字符串因Pattern开头就会返回true.
看下面例子:
上面程序创建了一个邮件地址Pattern,接着这个Pattern与多个邮件地址进行匹配,当程序中的Matcher为Null时候创建一个Matcher对象,一旦Matcher对象创建后程序就调用Matcher的reset方法将该Matcher应用于新的字符序列。
Pattern p=Pattern.compile("a*b");//把一个字符串编译成Pattern对象; Matcher m=p.matcher("aaaaaab");//使用Pattern对象创建Matcher对象; boolean b=m.matches();//返回true;
上面定义的Pattern对象可以多次被使用,Pattern是不可变类,可供多个线程安全使用。
Matcher 类提供了如下常用的方法:
find:返回目标字符串是否包含与Pattern匹配的子串(每次调用都是在上一次find方法找到的匹配字符串后开始查找)。
group:返回上一次与Pattern匹配的子串。:
start:返回上一次与Pattern匹配的子串在目标字符串中开始位置。
end:返回上一次与Pattern匹配的子串在目标字符串中结束位置加1。
lookingAt:返回目标字符串前面部分与Pattern是否匹配。
matches:返回整个目标字符串是否与Pattern匹配。
reset:可一将现有的Matcher对象应用到一个新的字符序列。
下面程序演示了各个方法的用途:
import java.util.regex.*; public class FindGroup {//演示findf方法该方法可以传入一个参数 public static void main(String[] args) { Matcher m = Pattern.compile("\\w+") .matcher("Java is very easy!"); while(m.find()) { System.out.println(m.group()); } int i = 0; while(m.find(i)) { System.out.print(m.group() + "\t"); i++; } } }
运行结果:
Java is very easy Java ava va a is is s very very ery ry y easy easy asy sy y
从上面的结果可以看出,find方法依次查找字符串中与Pattern匹配的子串,一旦找到对应的子串,下次调用find方法会接着向下查找。除此之外find方法还可以传入一个带Int类型的参数,find从该int索引处向下找。
start和end主要确定子串在目标字符串中的位置如下:
import java.util.regex.*; public class StartEnd { public static void main(String[] args) { String regStr = "Java is very easy!"; System.out.println("目标字符串是:" + regStr); Matcher m = Pattern.compile("\\w+") .matcher(regStr); while(m.find()) { System.out.println(m.group() + "子串的起始位置:" + m.start() + ",其结束位置:" + m.end()); } } }
输出结果:
is子串的起始位置:5,其结束位置:7 very子串的起始位置:8,其结束位置:12 easy子串的起始位置:13,其结束位置:17
matches 和lookingAt相似,但前者要求匹配整个字符串,后者只要字符串因Pattern开头就会返回true.
看下面例子:
import java.util.regex.*; public class TestMatches { public static void main(String[] args) { String[] mails = { "kongyeeku@163.com" , "kongyeeku@gmail.com", "ligang@oneedu.cn", "wawa@abc.xx" }; String mailRegEx = "\\w{3,20}@\\w+\\.(com|org|cn|org|net|gov)"; Pattern mailPattern = Pattern.compile(mailRegEx); Matcher matcher = null; for (String mail : mails) { if (matcher == null) { matcher = mailPattern.matcher(mail); } else { matcher.reset(mail); } if (matcher.matches()) { System.out.println(mail + "是一个有效的邮件地址!"); } else { System.out.println(mail + "不是一个有效的邮件地址!"); } } } }
上面程序创建了一个邮件地址Pattern,接着这个Pattern与多个邮件地址进行匹配,当程序中的Matcher为Null时候创建一个Matcher对象,一旦Matcher对象创建后程序就调用Matcher的reset方法将该Matcher应用于新的字符序列。
相关文章推荐
- Java正则表达式 重复字符(串)问题
- Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法
- 016Java正则表达式
- Java正则表达式 重复字符(串)问题
- Java 正则表达式集合
- Java - 正则表达式匹配模式
- Java中正则表达式的使用
- Java script 正则表达式(3)
- Java正则表达式教程
- 使用Java正则表达式匹配IP
- Java中使用正则表达式
- JAVA基础系列之学习正则表达式
- JAVA 正则表达式 分组
- java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总结
- 如何使用Java自带的正则表达式【转】
- Java正则表达式 去掉括号内任意字符
- Java正则表达式获取网页所有网址和链接文字
- java 正则表达式
- JAVA正则表达式