在web开发中,字符串的处理往往最为麻烦,处理的过程中,正则表达式用得非常频繁,最常见的如登陆校验,注册校验,以及邮箱等信息验证Pattern 类的对象是正则表达式编译后在中的表示形式,因此正则表达式的对象必须先编译为Pattern对象,然后再用Pattern对象创建Matcher对象,执行所匹配的状态封装在Matcher对象里面;多个Matcher对象可以共享一个Pattern对象,如:
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正则表达式Java正则表达式
本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Apache...
java,正则表达式,详解,java正则表达式,PDF
java通过正则表达式匹配获取MAC(支持windows和Linux)
主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作技巧,需要的朋友可以参考下
java 使用正则表达式验证电话号码的格式 java 使用正则表达式验证电话号码的格式
Java根据正则表达式生成字符串,包括了Xeger和automaton
java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解
正则表达式之道.doc 正则表达式中的特殊字符.doc Java正则表达式详解.doc 正则表达式.ppt JAVA正则表达式--Pattern和Matcher.doc 例子
Java正则表达式 Java 正则表达式 图片版 携带方便,查阅方便!~
Java 使用正则表达式对象实现正则的获取功能 Java 使用正则表达式对象实现正则的获取功能
Java常用正则表达式,一些在开发中常用的表达式。
java使用正则表达式进行校验验证,主要使用了Pattern和Matcher类,直接main方法运行就可以,亲测有效
java的正则表达式的详细说明,里面有详细的说明和例子,是要学习java正则表达式的好资料。
主要介绍了java使用正则表达式判断手机号的方法,分析了手机号码段的原理及java使用正则表达式针对手机号的匹配操作实现技巧,需要的朋友可以参考下
java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式
java 利用正则表达式从字符串中提取省、市、区、镇、乡等区域名称(包含少数民族地区),支持地址中无省,无市,无县情况。
JAVA正则表达式JAVA正则表达式JAVA正则表达式
如果正则表达式的内容需要被再次引用,那么需要对正则表达式的内容进行分组
通过正则表达式,进行反向的生成满足正则表达式的数据。