Java 正则表达式的总结和一些小例子.doc_第1页
Java 正则表达式的总结和一些小例子.doc_第2页
Java 正则表达式的总结和一些小例子.doc_第3页
Java 正则表达式的总结和一些小例子.doc_第4页
Java 正则表达式的总结和一些小例子.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java 正则表达式的总结和一些小例子 从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理,如匹配,搜索,提取和分析结构化内容. java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher. Pattern是一个正则表达式经编译后的表现模式。在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特定的String那样简单,也可以很复杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也适用于国际化的应用程序. Pattern类的方法简述 方法说明staticPetternpile(Stringregex,intflag)编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE表示不区分大小写)Matchermatch(CharSequenceinput)获取匹配器,input时输入的待处理的字符串staticbooleanmatches(Stringregex,CharSequenceinput)快速的匹配调用,直接根据输入的模式regex匹配inputStringsplit(CharSequenceinput,intlimit)分隔字符串input,limit参数可以限制分隔的次数 Matcher一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。 Matcher类的方法简述 方法说明booleanmatches()对整个输入字符串进行模式匹配.booleanlookingAt()从输入字符串的开始处进行模式匹配booleanfind(intstart)从start处开始匹配模式intgroupCount()返回匹配后的分组数目StringreplaceAll(Stringreplacement)用给定的replacement全部替代匹配的部分StringrepalceFirst(Stringreplacement)用给定的replacement替代第一次匹配的部分MatcherappendReplacement(StringBuffersb,Stringreplacement)根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后StringBufferappendTail(StringBuffersb)将输入序列中匹配之后的末尾字串添加到sb当前位置之后.正则表达式中常见通配符: 对于单字符串比较而言,使用正则表达式没有什么优势.Regex的真正强大之处在于体现在包括字符类和量词(*,+,?)的更复杂的模式上. 字符类包括: 复制代码代码如下: d数字 D非数字 w单字字符(0-9,A-Z,a-z) W非单字字符 s空白(空格符,换行符,回车符,制表符) S非空白 由方括号内的一个字符列表创建的自定义字符类 .匹配任何单个字符 下面的字符将用于控制将一个子模式应用到匹配次数的过程. ?重复前面的子模式0次到一次 *重复前面的子模式0次或多次 +重复前面的子模式一次到多次 以下是实例部分: 实例一: 正则式是最简单的能准确匹配一个给定String的模式,模式与要匹配的文本是等价的.静态的Pattern.matches方法用于比较一个String是否匹配一个给定模式.例程如下: 复制代码代码如下: Stringdata=java; booleanresult=Pattern.matches(java,data); 实例二: 复制代码代码如下: StringdataArr=moon,mon,moon,mono; for(Stringstr:dataArr) StringpatternStr=m(o+)n; booleanresult=Pattern.matches(patternStr,str); if(result) System.out.println(字符串+str+匹配模式+patternStr+成功); else System.out.println(字符串+str+匹配模式+patternStr+失败); 模式是”m(o+)n”,它表示mn中间的o可以重复一次或多次,因此moon,mon,mooon能匹配成功,而mono在n后多了一个o,和模式匹配不上. 注: +表示一次或多次;?表示0次或一次;*表示0次或多次. 实例三: 复制代码代码如下: StringdataArr=ban,ben,bin,bon,bun,byn,baen; for(Stringstr:dataArr) StringpatternStr=baeioun; booleanresult=Pattern.matches(patternStr,str); if(result) System.out.println(字符串+str+匹配模式+patternStr+成功); else System.out.println(字符串+str+匹配模式+patternStr+失败); 注:方括号中只允许的单个字符,模式“baeioun”指定,只有以b开头,n结尾,中间是a,e,i,o,u中任意一个的才能匹配上,所以数组的前五个可以匹配,后两个元素无法匹配. 方括号表示只有其中指定的字符才能匹配. 实例四: 复制代码代码如下: StringdataArr=been,bean,boon,buin,bynn; for(Stringstr:dataArr) StringpatternStr=b(ee|ea|oo)n; booleanresult=Pattern.matches(patternStr,str); if(result) System.out.println(字符串+str+匹配模式+patternStr+成功); else System.out.println(字符串+str+匹配模式+patternStr+失败); 如果需要匹配多个字符,那么就不能用上了,这里我们可以用()加上|来代替,()表示一组,|表示或的关系,模式b(ee|ea|oo)n就能匹配been,bean,boon等. 因此前三个能匹配上,而后两个不能. 实例五: 复制代码代码如下: StringdataArr=1,10,101,1010,100+; for(Stringstr:dataArr) StringpatternStr=d+; booleanresult=Pattern.matches(patternStr,str); if(result) System.out.println(字符串+str+匹配模式+patternStr+成功); else System.out.println(字符串+str+匹配模式+patternStr+失败); 注:从前面可以知道,d表示的是数字,而+表示一次或多次,所以模式d+就表示一位或多位数字. 因此前四个能匹配上,最后一个因为+号是非数字字符而匹配不上. /code 实例六: 复制代码代码如下: StringdataArr=a100,b20,c30,df10000,gh0t; for(Stringstr:dataArr) StringpatternStr=w+d+; booleanresult=Pattern.matches(patternStr,str); if(result) System.out.println(字符串+str+匹配模式+patternStr+成功); else System.out.println(字符串+str+匹配模式+patternStr+失败); 模式w+d+表示的是以多个单字字符开头,多个数字结尾的字符串,因此前四个能匹配上,最后一个因为数字后还含有单字字符而不能匹配. 实例七: 复制代码代码如下: Stringstr=薪水,职位姓名;年龄性别; StringdataArr=str.split(,s;); for(StringstrTmp:dataArr) System.out.println(strTmp); String类的split函数支持正则表达式,上例中模式能匹配”,”,单个空格,”;”中的一个,split函数能把它们中任意一个当作分隔符,将一个字符串劈分成字符串数组. 实例八: 复制代码代码如下: Stringstr=xx年12月11日; Patternp=Pattern.pile(年月日); StringdataArr=p.split(str); for(StringstrTmp:dataArr) System.out.println(strTmp); Pattern是一个正则表达式经编译后的表现模式,它的split方法能有效劈分字符串. 注意其和String.split()使用上的不同. 实例九: 复制代码代码如下: Stringstr=10元1000人民币10000元100000RMB; str=str.replaceAll(d+)(元|人民币|RMB),¥); System.out.println(str); 上例中,模式“(d+)(元|人民币|RMB)”按括号分成了两组,第一组d+匹配单个或多个数字,第二组匹配元,人民币,RMB中的任意一个,替换部分表示第一个组匹配的部分不变,其余组替换成¥. 替换后的str为¥10¥1000¥10000¥100000 实例十: 复制代码代码如下: Patternp=Pattern.pile(m(o+)n,Pattern.CASE_INSENSITIVE); /用Pattern类的matcher()方法生成一个Matcher对象 Matcherm=p.matcher(moonmooonMonmooooonMooon); StringBuffersb=newStringBuffer(); /使用find()方法查找第一个匹配的对象 booleanresult=m.find(); /使用循环找出模式匹配的内容替换之,再将内容加到sb里 while(result) m.appendReplacement(sb,moon); result=m.find(); /最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里; m.appendTail(sb); System.out.println(替换后内容是+sb.toString(); 实例十一: 除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,还可以用来指定精确指定出现的次数,X2,5表示X最少出现2次,最多出现5次;X2,表示X最少出现2次,多则不限;X5表示X只精确的出现5次. 例程: 复制代码代码如下: StringdataArr=google,gooogle,gooooogle,goooooogle,ggle; for(Stringstr:dataArr) StringpatternStr=g(o2,5)gle; booleanresult=Pattern.matches(patternStr,str); if(result) System.out.println(字符串+str+匹配模式+patternStr+成功); else System.out.println(字符串+str+匹配模式+patternStr+失败); 实例十二: -表示从.到,如a-e等同于abcde 复制代码代码如下: StringdataArr=Tan,Tbn,T,Ton,Twn; for(Stringstr:dataArr) Stringregex=Ta-cn; booleanresult=Pattern.matches(regex,str); if(result) System.out.println(字符串+str+匹配模式+regex+成功); else System.out.println(字符串+str+匹配模式+regex+失败); 实例十三:不区分大小写匹配. 正则表达式默认都是区分大小写的,使用了Pattern.CASE_INSENSITIVE则不对大小写进行区分. 复制代码代码如下: StringpatternStr=ab; Patternpattern=Pattern.pile(patternStr,Pattern.CASE_INSENSITIVE); StringdataArr=ab,Ab,AB; for(Stringstr:dataArr) Matchermatcher=pattern.matcher(str); if(matcher.find() System.out.println(字符串+str+匹配模式+patternStr+成功); 实例十四:使用正则表达式劈分字符串. 复制代码代码如下: 注意这里要把复杂的模式写在前面,否则简单模式会先匹配上. Stringinput=职务=GM薪水=50000,姓名=职业经理人;性别=男年龄=45; StringpatternStr=(s*,s*)|(s*;s*)|(s+); Patternpattern=Pattern.pile(patternStr); StringdataArr=pattern.split(input); for(Stringstr:dataArr) Sys

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论