字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现
这些目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理,如匹配,搜索,提取
和分析结构化内容.java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher.Pattern是一个正则表达式经编译后的表现模式。在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特
定的String那样简单,也可以很复杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也
适用于国际化的应用程序.Pattern类的方法简述方法说明staticPetterncompile(Stringregex,intflag)编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE表示
不区分大小写)Matchermatch(CharSequenceinput)获取匹配器,input时输入的待处理的字符串staticbooleanmatches(Stringregex,CharSequenceinput)快速的匹配调用,直接根据输入的模式regex匹配inputString[]split(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次或多次+重复前面的子模式一次到多次
匹配中文字符的正则表达式:[\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){returnthis.replace([^\x00-\xff]/g,"aa").length;}匹配空行的正则表达式:\n[\s|]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*)\/>/匹配首尾空格的正则表达式:(^\s*)|(\s*$)
以下是实例部分:实例一:正则式是最简单的能准确匹配一个给定String的模式,模式与要匹配的文本是等价的.静态的Pattern.matches方法用于比较一个String是否匹配一个给定模式.例程如下:Stringdata="java";booleanresult=Pattern.matches("java",data);输出:true实例二:String[]dataArr={"moon","mon","moon","mono"};
StringpatternStr="m(o+)n";booleanresult=false;for(Stringstr:dataArr){result=Pattern.matches(patternStr,str);if(result){System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");}else{System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");}}
输出:字符串moon匹配模式m(o+)n成功字符串mon匹配模式m(o+)n成功字符串moon匹配模式m(o+)n成功字符串mono匹配模式m(o+)n失败
模式是”m(o+)n”,它表示mn中间的o可以重复一次或多次,因此moon,mon,mooon能匹配成功,而mono在n后多了一个o,和模式匹配不上.
注:+表示一次或多次;?表示0次或一次;*表示0次或多次.实例三:String[]dataArr={"ban","ben","bin","bon","bun","byn","baen"};
StringpatternStr="b[aeiou]n";booleanresult=false;for(Stringstr:dataArr){result=Pattern.matches(patternStr,str);if(result){System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");}else{System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");}}
输出:字符串ban匹配模式b[aeiou]n成功字符串ben匹配模式b[aeiou]n成功字符串bin匹配模式b[aeiou]n成功字符串bon匹配模式b[aeiou]n成功字符串bun匹配模式b[aeiou]n成功字符串byn匹配模式b[aeiou]n失败字符串baen匹配模式b[aeiou]n失败
注:方括号中只允许的单个字符,模式“b[aeiou]n”指定,只有以b开头,n结尾,中间是a,e,i,o,u中任意一个的才能匹配上,所以数组的前五个可以匹配,后两个元素无法匹配。方括号[]表示只有其中指定的字符才能匹配.
实例四:String[]dataArr={"been","bean","boon","buin","bynn"};
StringpatternStr="b(ee|ea|oo)n";for(Stringstr:dataArr){booleanresult=Pattern.matches(patternStr,str);if(result){System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");}else{System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");}}
输出:字符串been匹配模式b(ee|ea|oo)n成功字符串bean匹配模式b(ee|ea|oo)n成功字符串boon匹配模式b(ee|ea|oo)n成功字符串buin匹配模式b(ee|ea|oo)n失败字符串bynn匹配模式b(ee|ea|oo)n失败如果需要匹配多个字符,那么[]就不能用上了,这里我们可以用()加上|来代替,()表示一组,|表示或的关系,模式b(ee|ea|oo)n就能匹配been,bean,boon等,因此前三个能匹配上,而后两个不能.
实例五:String[]dataArr={"1","10","101","1010","100+","100d"};
StringpatternStr="\\d+";for(Stringstr:dataArr){booleanresult=Pattern.matches(patternStr,str);if(result){System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");}else{System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");}}
输出:字符串1匹配模式\d+成功字符串10匹配模式\d+成功字符串101匹配模式\d+成功字符串1010匹配模式\d+成功字符串100+匹配模式\d+失败字符串100d匹配模式\d+失败
注:d表示字母d,\d表示的是数字,不是字母d,前一个'\'是转义字符,用来转义第二个'\'。'\d+'表示一个或一个以上数字,所以"\\d+"就表示一位或多位数字,因此前四个能匹配上,最后一个因为+号是非数字字符而匹配不上.
实例六:String[]dataArr={"a100","b20","c30","df10000","gh0t"};
StringpatternStr="\\w+\\d+";for(Stringstr:dataArr){booleanresult=Pattern.matches(patternStr,str);if(result){System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");}else{System.out.println("字符串"+str+"匹配模式