📄 java中正则表达式的应用-java面向对象 - it电子教育门户 高端java培训.htm
字号:
Pattern.compile("Kevin");<BR>
//用Pattern类的matcher()方法生成一个Matcher对象<BR>
Matcher m = p.matcher("Kelvin Li and Kelvin Chan are both
working in Kelvin Chen's KelvinSoftShop
company");<BR>
StringBuffer sb = new
StringBuffer();<BR>
int i=0;<BR>
//使用find()方法查找第一个匹配的对象<BR>
boolean result =
m.find();<BR>
//使用循环将句子里所有的kelvin找出并替换再将内容加到sb里<BR>
while(result)
{<BR>
i++;<BR>
m.appendReplacement(sb,
"Kevin");<BR>
System.out.println("第"+i+"次匹配后sb的内容是:"+sb);<BR>
//继续查找下一个匹配对象<BR>
result =
m.find();<BR>
}<BR>
//最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里;<BR>
m.appendTail(sb);<BR>
System.out.println("调用m.appendTail(sb)后sb的最终内容是:"+
sb.toString());<BR> }<BR>}<BR> </P>
<P><BR>最终输出结果为:<BR>第1次匹配后sb的内容是:Kevin<BR>第2次匹配后sb的内容是:Kevin Li
and Kevin<BR>第3次匹配后sb的内容是:Kevin Li and Kevin Chan are both
working in Kevin<BR>第4次匹配后sb的内容是:Kevin Li and Kevin Chan are
both working in Kevin Chen's
Kevin<BR>调用m.appendTail(sb)后sb的最终内容是:Kevin Li and Kevin Chan
are both working in Kevin Chen's KevinSoftShop
company.<BR>看了上面这个例程是否对appendReplacement(),appendTail()两个方法的使用更清楚呢,如果还是不太肯定最好自己动手写几行代码测试一下。<BR>★group()/group(int
group)/groupCount():<BR>该系列方法与我们在上篇介绍的Jakarta-ORO中的MatchResult
.group()方法类似(有关Jakarta-ORO请参考上篇的内容),都是要返回与组匹配的子串内容,下面代码将很好解释其用法:<BR>import
java.util.regex.*;<BR> <BR>public class
GroupTest{<BR> public static void
main(String[] args)
<BR>
throws Exception
{<BR> Pattern p =
Pattern.compile("(ca)(t)");
<BR> Matcher m =
p.matcher("one cat,two cats in the
yard");<BR>
StringBuffer sb = new
StringBuffer();<BR>
boolean result =
m.find();<BR>
System.out.println("该次查找获得匹配组的数量为:"+m.groupCount());<BR>
for(int
i=1;i<=m.groupCount();i++){<BR>
System.out.println("第"+i+"组的子串内容为:
"+m.group(i));<BR>
}<BR> }<BR>}<BR> </P>
<P><BR>输出为:<BR>该次查找获得匹配组的数量为:2<BR>第1组的子串内容为:ca<BR>第2组的子串内容为:t<BR>Matcher对象的其他方法因比较好理解且由于篇幅有限,请读者自己编程验证。<BR>4.一个检验Email地址的小程序:<BR>最后我们来看一个检验Email地址的例程,该程序是用来检验一个输入的EMAIL地址里所包含的字符是否合法,虽然这不是一个完整的EMAIL地址检验程序,它不能检验所有可能出现的情况,但在必要时您可以在其基础上增加所需功能。<BR>import
java.util.regex.*;<BR>public class Email {<BR>
public static void main(String[] args) throws Exception
{<BR> String input =
args[0];<BR> //检测输入的EMAIL地址是否以
非法符号"."或"@"作为起始字符
<BR> Pattern p =
Pattern.compile("^\\.|^\\@");<BR>
Matcher m =
p.matcher(input);<BR> if
(m.find()){<BR>
System.err.println("EMAIL地址不能以'.'或'@'作为起始字符");<BR>
}<BR>
//检测是否以"www."为起始<BR> p =
Pattern.compile("^www\\.");<BR>
m = p.matcher(input);<BR> if
(m.find()) {<BR>
System.out.println("EMAIL地址不能以'www.'起始");<BR>
}<BR>
//检测是否包含非法字符<BR> p =
Pattern.compile("[^A-Za-z0-9\\.\\@_\\-~#]+");<BR>
m = p.matcher(input);<BR>
StringBuffer sb = new
StringBuffer();<BR> boolean
result = m.find();<BR> boolean
deletedIllegalChars = false;<BR>
while(result)
{<BR>
//如果找到了非法字符那么就设下标记<BR>
deletedIllegalChars =
true;<BR>
//如果里面包含非法字符如冒号双引号等,那么就把他们消去,加到SB里面<BR>
m.appendReplacement(sb,
"");<BR>
result = m.find();<BR>
}<BR>
m.appendTail(sb);<BR> input =
sb.toString();<BR> if
(deletedIllegalChars)
{<BR>
System.out.println("输入的EMAIL地址里包含有冒号、逗号等非法字符,请修改");<BR>
System.out.println("您现在的输入为:
"+args[0]);<BR>
System.out.println("修改后合法的地址应类似:
"+input);<BR> }<BR>
}<BR>}<BR> </P>
<P><BR>例如,我们在命令行输入:java Email
www.kevin@163.net<BR>那么输出结果将会是:EMAIL地址不能以'www.'起始<BR>如果输入的EMAIL为@kevin@163.net<BR>则输出为:EMAIL地址不能以'.'或'@'作为起始字符<BR>当输入为:cgjmail#$%@163.net<BR>那么输出就是:<BR>输入的EMAIL地址里包含有冒号、逗号等非法字符,请修改<BR>您现在的输入为:
cgjmail#$%@163.net<BR>修改后合法的地址应类似: cgjmail@163.net</P>
<P>5.总结:<BR>本文介绍了jdk1.4.0-beta3里正则表达式库--java.util.regex中的类以及其方法,如果结合与上一篇中所介绍的Jakarta-ORO
API作比较,读者会更容易掌握该API的使用,当然该库的性能将在未来的日子里不断扩展,希望获得最新信息的读者最好到及时到SUN的网站去了解。<BR>6.结束语:<BR>本来计划再多写一篇介绍一下需付费的正则表达式库中较具代表性的作品,但觉得既然有了免费且优秀的正则表达式库可以使用,何必还要去找需付费的呢,相信很多读者也是这么想的:,所以有兴趣了解更多其他的第三方正则表达式库的朋友可以自己到网上查找或者到我在参考资料里提供的网址去看看。<BR>参考资料<BR>java.util.regex的帮助文档
<BR>Dana Nourie 和Mike McCloskey所写的Regular Expressions and the
Java" Programming Language
<BR>需要更多的第三方正则表达式资源以及基于它们所开发的应用程序请看http://www.meurrens.org/ip-Links/java/regex/index.html
</FONT></P></DIV></SPAN></TD></TR>
<TR>
<TD width="71%"> </TD>
<TD width="29%">【 <A
href="http://www.mldn.cn/print.jtml?articleid=267">打印</A> 】【
<A
href="http://www.mldn.cn/member/favlist.jtml?action=add&postid=267">收藏</A>
】【 <A href="http://www.mldn.cn/email.jtml?articleid=267"
target=_blank>推荐</A> 】 </TD></TR>
<TR>
<TD colSpan=2>
<TABLE cellSpacing=3 cellPadding=0 width="100%" align=center
bgColor=#ffffff border=0>
<TBODY>
<TR height=25>
<TD align=middle width="33%"><IMG height=95 alt=java视频教程
src="JAVA中正则表达式的应用-JAVA面向对象 - IT电子教育门户 高端JAVA培训.files/javavideo.gif"
width=642></TD></TR>
<TR>
<TD class=content-table vAlign=top align=middle>
<TABLE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -