前往顾页
以后地位: 主页 > 收集编程 > .Net实例教程 >

正则表达式

时候:2012-05-07 09:41来源:知行网www.zhixing123.cn 编辑:麦田守望者

字符串措置是很多法度中非常首要的一部分,它们可以用于文本显现,数据表示,查找键和很多目标.在Unix下,用户可利用正则表达式的健旺服从实现这些目标,从Java1.4起,Java核心API就引入了java.util.regex法度包,它是一种有价值的根本东西,可以用于很多范例的文本措置,如婚配,搜刮,提取和阐公布局化内容.
java.util.regex是一个用正则表达式所订制的形式来对字符串进行婚配事情的类库包。它包含两个类:Pattern和Matcher.
Pattern是一个正则表达式经编译后的表示形式。在java中,经由过程恰当定名的Pattern类可以容易肯定String是不是婚配某种形式.形式可以象婚配某个特定的String那样简朴,也能够很复杂,需求采取分组和字符类,如空缺,数字,字母或节制符.因为Java字符串基于同一字符编码(Unicode),正则表达式也合用于国际化的利用法度.

Pattern类的体例简述

体例
申明
static Pettern compile(String regex,intflag) 编译形式,参数regex表示输入的正则表达式,flag表示形式范例(Pattern.CASE_INSENSITIVE表示不辨别年夜小写)
Matcher match(CharSequenceinput) 获得婚配器,input时输入的待措置的字符串
static boolean matches(String regex, CharSequenceinput) 疾速的婚配调用,直接按照输入的形式regex婚配input
String[] split(CharSequence input,intlimit) 分开字符串input,limit参数可以限定分开的次数
Matcher一个Matcher工具是一个状况机器,它根据Pattern工具做为婚配形式对字符串展开婚配查抄。起首一个Pattern实例订制了一个所用语法与PERL的近似的正则表达式经编译后的形式,然后一个Matcher实例在这个给定的Pattern实例的形式节制下进行字符串的婚配事情。

Matcher类的体例简述
boolean matches() 对全部输入字符串进行形式婚配.

boolean lookingAt() 从输入字符串的开端处进行形式婚配
boolean find(int start) 从start处开端婚配形式
int groupCount() 前往婚配后的分组数量
String replaceAll(Stringreplacement) 用给定的replacement全数替代婚配的部分
String repalceFirst(Stringreplacement) 用给定的replacement替代第一次婚配的部分
Matcher appendReplacement(StringBuffer sb,Stringreplacement) 按照形式用replacement替代呼应内容,并将婚配的成果增加到sb以后地位以后
StringBuffer appendTail(StringBuffersb) 将输入序列中婚配以后的开端字串增加到sb以后地位以后.
正则表达式中常见通配符:对单字符串比较而言,利用正则表达式没有甚么上风.Regex的真正强年夜的地方在于表现在包含字符类和量词(*,+,?)的更复杂的形式上.
字符类包含:
\d 数字
\D 非数字
\w 单字字符(0-9,A-Z,a-z)
\W 非单字字符
\s 空缺(空格符,换行符,回车符,制表符)
\S 非空缺
[] 由方括号内的一个字符列表建立的自定义字符类
. 婚配任何单个字符
下面的字符将用于节制将一个子形式利用到婚配次数的过程.
? 反复前面的子形式0次到一次
* 反复前面的子形式0次或多次
+ 反复前面的子形式一次到多次

例子一:

正则式是最简朴的能精确婚配一个给定String的形式,形式与要婚配的文本是等价的.静态的Pattern.matches体例用于比较一个String是不是婚配一个给定形式.例程以下:

String data="java";

boolean result=Pattern.matches("java",data);

System.out.println("result is :"+result);

成果:result is true

例子二:

String[] dataArr = { "moon", "mon", "moon", "mono" };

 

for (String s : dataArr) {

String patternStr="m(o+)n";

 

boolean result = Pattern.matches(patternStr, s);

if (result) {

System.out.println("字符串"+s+"婚配形式"+patternStr+"成功");

}

else{

System.out.println("字符串"+s+"婚配形式"+patternStr+"失败");

}

}

成果:

字符串moon婚配形式m(o+)n成功

字符串mon婚配形式m(o+)n成功

字符串moon婚配形式m(o+)n成功

字符串mono婚配形式m(o+)n失败

例子三:注:方括号中只许可的单个字符,形式“b[aeiou]n”指定,只需以b开首,n末端,中间是a,e,i,o,u中肆意一个的才气婚配上,所以数组的前五个可以婚配,后两个元素无法婚配.
方括号[]表示只需此中指定的字符才气婚配.

 

String[] dataArr = { "ban", "ben", "bin", "bon","bun","byn","baen"};

for (String s : dataArr)

{

StringpatternStr="b[aeiou]n";

booleanresult = Pattern.matches(patternStr, s);

if(result)

{

System.out.println("字符串"+s+"婚配形式"+patternStr+"成功");

}

Else

{

System.out.println("字符串"+s+"婚配形式"+patternStr+"失败");

}

}

成果:

字符串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(ee|ea|oo)n就可以婚配been,bean,boon等.
是以前三个能婚配上,而后两个不克不及.

 

String[] dataArr = { "been", "bean", "boon", "buin","bynn"};

for (String s : dataArr)

{

StringpatternStr="b(ee|ea|oo)n";

booleanresult = Pattern.matches(patternStr, s);

if(result)

{

System.out.println("字符串"+s+"婚配形式"+patternStr+"成功");

}

else{

System.out.println("字符串"+s+"婚配形式"+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失败

例子五:注:畴前面可以晓得,\d表示的是数字,而+表示一次或多次,所以形式\d+就表示一名或多位数字.
是以前四个能婚配上,最后一个因为+号是非数字字符而婚配不上.

String[] dataArr = { "1", "10", "101", "1010" ,"100+"};

for (String s : dataArr)

{

StringpatternStr="\\d+";

booleanresult = Pattern.matches(patternStr, s);

if(result)

{

System.out.println("字符串"+s+"婚配形式"+patternStr+"成功");

}

else{

System.out.println("字符串"+s+"婚配形式"+patternStr+"失败");

}

}

字符串1婚配形式\d+成功

字符串10婚配形式\d+成功

字符串101婚配形式\d+成功

字符串1010婚配形式\d+成功

字符串100+婚配形式\d+失败

例子六:形式\w+\d+表示的是以多个单字字符开首,多个数字末端的字符串,是以前四个能婚配上,最后一个因为数字后还含有单字字符而不克不及婚配.

String[] dataArr = { "a100", "b20", "c30", "df10000","gh0t"};

for (String s : dataArr)

{

StringpatternStr="\\w+\\d+";

booleanresult = Pattern.matches(patternStr, s);

if(result)

{

System.out.println("字符串"+s+"婚配形式"+patternStr+"成功");

}

else{

System.out.println("字符串"+s+"婚配形式"+patternStr+"失败");

}

}

成果:

字符串a100婚配形式\w+\d+成功

字符串b20婚配形式\w+\d+成功

字符串c30婚配形式\w+\d+成功

字符串df10000婚配形式\w+\d+成功

字符串gh0t婚配形式\w+\d+失败

例子七:String类的split函数支撑正则表达式,上例中形式能婚配逗号,单个空格,分号中的一个,split函数能把它们中肆意一个当作分开符,将一个字符串劈分成字符串数组.

String s="薪水,职位 姓名;春秋 性别";

String[] dataArr =s.split("[,\\s;]");

for (String strTmp : dataArr) {

System.out.println(strTmp);

}

成果:

薪水

职位

姓名

春秋

性别

例子八:Pattern是一个正则表达式经编译后的表示形式,它的split体例能有效劈分字符串.
重视其和String.split()利用上的不合.

String s="2007年12月11日";

Pattern p = Pattern.compile("[年代日]");

String[] dataArr =p.split(s);

------分开线----------------------------
标签(Tag):正则表达式
------分开线----------------------------
保举内容
猜你感兴趣