在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 类提供了如下常用的方法:<wbr><br>
find:返回目标字符串是否包含与Pattern匹配的子串(每次调用都是在上一次find方法找到的匹配字符串后开始查找)。<br>
group:返回上一次与Pattern匹配的子串。:<br>
start:返回上一次与Pattern匹配的子串在目标字符串中开始位置。<br>
end:返回上一次与Pattern匹配的子串在目标字符串中结束位置加1。<br>
lookingAt:返回目标字符串前面部分与Pattern是否匹配。<br>
matches:返回整个目标字符串是否与Pattern匹配。<br>
reset:可一将现有的Matcher对象应用到一个新的字符序列。<br>
下面程序演示了各个方法的用途:<br>
import java.util.regex.*;<br>
public class FindGroup<br>
{<span style="color:#6fe072">//演示findf方法该方法可以传入一个参数</span><br><wbr><wbr><wbr> public static void main(String[] args)<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr> Matcher m = Pattern.compile("\\w+")<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> .matcher("Java is very easy!");<br><wbr><wbr><wbr><wbr><wbr><wbr> while(m.find())<br><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> System.out.println(m.group());<br><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr> int i = 0;<br><wbr><wbr><wbr><wbr><wbr><wbr> while(m.find(i))<br><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> System.out.print(m.group() + "\t");<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> i++;<br><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr> }<br>
}<br>
运行结果<br>
Java<br>
is<br>
very<br>
easy<br>
Java<wbr><wbr><wbr> ava<wbr><wbr><wbr> va<wbr><wbr><wbr> a<wbr><wbr><wbr> is<wbr><wbr><wbr> is<wbr><wbr><wbr> s<wbr><wbr><wbr> very<wbr><wbr><wbr> very<wbr><wbr><wbr> ery<wbr><wbr><wbr> ry<wbr><wbr><wbr> y<wbr><wbr><wbr>
easy<wbr><wbr><wbr> easy<wbr><wbr><wbr> asy<wbr><wbr><wbr> sy<wbr><wbr><wbr> y<br>
从上面的结果可以看出,find方法依次查找字符串中与Pattern匹配的子串,一旦找到对应的子串,下次调用find方法会接着向下查找。除此之外find方法还可以传入一个带Int类型的参数,find从该int索引处向下找。<br>
start和end主要确定子串在目标字符串中的位置如下:<br>
import java.util.regex.*;<br>
public class StartEnd<br>
{<br><wbr><wbr><wbr> public static void main(String[] args)<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr> String regStr = "Java is very easy!";<br><wbr><wbr><wbr><wbr><wbr><wbr> System.out.println("目标字符串是:" + regStr);<br><wbr><wbr><wbr><wbr><wbr><wbr> Matcher m = Pattern.compile("\\w+")<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> .matcher(regStr);<br><wbr><wbr><wbr><wbr><wbr><wbr> while(m.find())<br><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> System.out.println(m.group() + "子串的起始位置:" + m.start()<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> + ",其结束位置:" + m.end());<br><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr> }<br>
}<br>
输出结果:<br>
is子串的起始位置:5,其结束位置:7<br>
very子串的起始位置:8,其结束位置:12<br>
easy子串的起始位置:13,其结束位置:17<br>
matches 和lookingAt相似,但前者要求匹配整个字符串,后者只要字符串因Pattern开头就会返回true.<br>
看下面例子:<br>
import java.util.regex.*;<br><br>
public class TestMatches<br>
{<br><wbr><wbr><wbr> public static void main(String[] args)<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr> String[] mails =<br><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> "kongyeeku@163.com" ,<br><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
本文详细介绍了在web开发中如何使用正则表达式进行字符串处理,包括Pattern和Matcher类的基本用法和常见方法,如find、group、start、end、matches和lookingAt等,以及它们在验证信息、提取文本等方面的应用。
8779

被折叠的 条评论
为什么被折叠?



