在Java编程中使用正则表达式
在程序设计过程中,经常需要对输入的数据格式进行检查,这时就会用到正则表达式,匹配正则表达式则数据格式正确,否则格式错误。为了检查输入的数据是否满足某种格式,可以使用String类的matches()方法进行判断,语法格式如下:
booleanmatches(Stringregex)
regex:指定的正则表达式。
返回值:返回boolean类型。
该方法用于告知当前字符串是否匹配参数regex指定的正则表达式,返回值是boolean类型,如果当前字符串与正则表达式匹配,则该方法返回true,否则返回false。
正则表达式是由一些含有特殊意义的字符组成的字符串,这些含有特殊意义的字符称为元字符,下面列出了正则表达式的部分元字符,在正则表达式的写法中,要在下列元字符的前面添加“\”符号进行转译,例如元字符“\d”在正则表达式的写法中是“\d”,但是对于“.”,转译后就不代表任意一个字符啦,而是表示一个具体的句点。
.:代表任意一个字符。
\d:代表0~9的任何一个数字。
\D:代表任何一个非数字字符。
\s:代表空白字符。
\S:代表非空白字符。
\w:代表可用作标识符的字符,但不包括“$”。
\W:代表不可用作标识符的字符。
\p{Lower}:代表小写字母a~z。
\p{Upper}:代表大写字母A~A。
\p{ASCII}:ASCII字符。
\p{Alpha}:字母字符。
\p{Digit}:十进制数字,0~9。
\p{Alnum}:数字或字母字符。
\p{Punct}:标点符号。
\p{Graph}:可见字符。
\p{Print}:可打印字符。
\p{Blank}:空白或制表符。
\p{Cntrl}:控制字符。
在使用正则表达式时,如果需要某一类型的元字符多次输出,逐个输入就相当麻烦,这时就可以使用正则表达式的限定字符来重复次数,下面列出了常用限定符及其含义。
?:0次或1次。
*:0次或多次。
+:0次或1次。
{n}:重复n次。
{n,}:至少重复n次。
{n,m}:重复n~m次。
在正则表达式中还可以用方括号把多个字符括起来,方括号中各种正则表达式代表不同的含义,下面列出了方括号中元字符及其含义。
[abc]:表示a、b或者c。
[^abc]:表示a、b和c之外的任何字符。
[a-zA-Z]:a~z或A~Z的任何字符。
[a-d[m-p]]:a~d或m~p的任何字符。
[a-z&&[def]]:d、e或者f。
[a-z&&[^bc]]:a~z之间不含b和c的所有字符。
[a-z&&[^m-p]]:a~z之间不含m~p的所有字符。
用法示例:
1、车牌号:
/** * *@description:验证车牌号 *@paramcarNum *豫A106EK *@return合法:true不合法:false */ publicstaticbooleanvalidateCarNum(StringcarNum){ booleanresult=false; String[]provence=newString[]{"京","津","冀","晋","辽","吉","黑","沪","苏","浙","皖","闽","赣","鲁","豫","鄂","湘","粤","桂","琼","渝", "川","黔","滇","藏","陕","甘","青","宁","新","港","澳","蒙"}; Stringreg="[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}"; booleanfirstChar=false; if(carNum.length()>0){ firstChar=Arrays.asList(provence).contains(carNum.substring(0,1)); } try{ Patternp=Pattern.compile(reg); Matcherm=p.matcher(carNum); if(m.matches()&&firstChar){ result=true; }else{ result=false; } }catch(Exceptione){ e.printStackTrace(); } returnresult; }
2、手机号码:
/** * *@description:验证手机号码 *@parammobileNum15516985859 *@return合法:true不合法:false */ publicstaticbooleanisMobileNum(StringmobileNum){ booleanresult=false; try{ Patternp=Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); Matcherm=p.matcher(mobileNum); result=m.matches(); }catch(Exceptione){ e.printStackTrace(); } returnresult; }
手机号+固定电话:010-1111111,15516985859,0377-1111111
//java检测是否为电话号码(手机、固定电话验证) StringlegalPhone=""; StringregExp="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}|[0]{1}[0-9]{2,3}-[0-9]{7,8}$"; Patternp=Pattern.compile(regExp); Matcherm=p.matcher(importPotentialBFOs[i].getLegalPhone()); if(m.find()){//注意:m.find只能用一次,第二次调用后都为false legalPhone=importPotentialBFOs[i].getLegalPhone(); uploadTmp.setLegalTelephone(legalPhone); }else{ thrownewBizException("联系电话格式错误!"); }
3.实数:
String[]arrs=newString[]{"a","1.123","-1.23","0","+111"}; Stringregex="-?\\d+\\.?\\d*"; Patternp=Pattern.compile(regex); for(inti=0;i<arrs.length;i++){ Matcherm=p.matcher(arrs[i]); System.out.println(arrs[i]+":"+m.matches()); }
打印:
a:false
1.123:true
-1.23:true
0:true
+111:false