在Java編程中使用正則表達(dá)式
在程序設(shè)計(jì)過程中,經(jīng)常需要對輸入的數(shù)據(jù)格式進(jìn)行檢查,這時(shí)就會用到正則表達(dá)式,匹配正則表達(dá)式則數(shù)據(jù)格式正確,否則格式錯(cuò)誤。為了檢查輸入的數(shù)據(jù)是否滿足某種格式,可以使用String類的matches()方法進(jìn)行判斷,語法格式如下:
boolean matches(String regex)
regex:指定的正則表達(dá)式。
返回值:返回boolean類型。
該方法用于告知當(dāng)前字符串是否匹配參數(shù)regex指定的正則表達(dá)式,返回值是boolean類型,如果當(dāng)前字符串與正則表達(dá)式匹配,則該方法返回true,否則返回false。
正則表達(dá)式是由一些含有特殊意義的字符組成的字符串,這些含有特殊意義的字符稱為元字符,下面列出了正則表達(dá)式的部分元字符,在正則表達(dá)式的寫法中,要在下列元字符的前面添加“\”符號進(jìn)行轉(zhuǎn)譯,例如元字符“\d”在正則表達(dá)式的寫法中是“\d”,但是對于“.”,轉(zhuǎn)譯后就不代表任意一個(gè)字符啦,而是表示一個(gè)具體的句點(diǎn)。
.:代表任意一個(gè)字符。
\d:代表0~9的任何一個(gè)數(shù)字。
\D:代表任何一個(gè)非數(shù)字字符。
\s:代表空白字符。
\S:代表非空白字符。
\w:代表可用作標(biāo)識符的字符,但不包括“$”。
\W:代表不可用作標(biāo)識符的字符。
\p{Lower}:代表小寫字母a~z。
\p{Upper}:代表大寫字母A~A。
\p{ASCII}:ASCII字符。
\p{Alpha}:字母字符。
\p{Digit}:十進(jìn)制數(shù)字,0~9。
\p{Alnum}:數(shù)字或字母字符。
\p{Punct}:標(biāo)點(diǎn)符號。
\p{Graph}:可見字符。
\p{Print}:可打印字符。
\p{Blank}:空白或制表符。
\p{Cntrl}:控制字符。
在使用 正則表達(dá)式時(shí),如果需要某一類型的元字符多次輸出,逐個(gè)輸入就相當(dāng)麻煩,這時(shí)就可以使用正則表達(dá)式的限定字符來重復(fù)次數(shù),下面列出了常用限定符及其含義。
?:0次或1次。
*:0次或多次。
+:0次或1次。
{n}:重復(fù)n次。
{n,}:至少重復(fù)n次。
{n,m}:重復(fù)n~m次。
在正則表達(dá)式中還可以用方括號把多個(gè)字符括起來,方括號中各種正則表達(dá)式代表不同的含義,下面列出了方括號中元字符及其含義。
[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:驗(yàn)證車牌號
* @param carNum
* 豫A106EK
* @return 合法:true 不合法:false
*/
public static boolean validateCarNum(String carNum) {
boolean result = false;
String[] provence = new String[] { "京", "津", "冀", "晉", "遼", "吉", "黑", "滬", "蘇", "浙", "皖", "閩", "贛", "魯", "豫", "鄂", "湘", "粵", "桂", "瓊", "渝",
"川", "黔", "滇", "藏", "陜", "甘", "青", "寧", "新", "港", "澳", "蒙" };
String reg = "[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}";
boolean firstChar = false;
if (carNum.length() > 0) {
firstChar = Arrays.asList(provence).contains(carNum.substring(0, 1));
}
try {
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(carNum);
if (m.matches() && firstChar) {
result = true;
} else {
result = false;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
2、手機(jī)號碼:
/**
*
* @description:驗(yàn)證手機(jī)號碼
* @param mobileNum 15516985859
* @return 合法:true 不合法:false
*/
public static boolean isMobileNum(String mobileNum) {
boolean result = false;
try {
Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
Matcher m = p.matcher(mobileNum);
result = m.matches();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
手機(jī)號+固定電話:010-1111111,15516985859,0377-1111111
//java檢測是否為電話號碼(手機(jī)、固定電話驗(yàn)證)
String legalPhone = "";
String regExp ="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}|[0]{1}[0-9]{2,3}-[0-9]{7,8}$";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(importPotentialBFOs[i].getLegalPhone());
if(m.find()){ //注意:m.find只能用一次,第二次調(diào)用后都為false
legalPhone = importPotentialBFOs[i].getLegalPhone();
uploadTmp.setLegalTelephone(legalPhone);
}else{
throw new BizException("聯(lián)系電話格式錯(cuò)誤!");
}
3.實(shí)數(shù):
String[] arrs=new String[]{"a","1.123","-1.23","0","+111"};
String regex="-?\\d+\\.?\\d*";
Pattern p = Pattern.compile(regex);
for (int i = 0; i < arrs.length; i++) {
Matcher m = p.matcher(arrs[i]);
System.out.println(arrs[i]+":"+m.matches());
}
打印:
a:false
1.123:true
-1.23:true
0:true
+111:false
相關(guān)文章
spring boot集成rabbitmq的實(shí)例教程
這篇文章主要給大家介紹了關(guān)于spring boot集成rabbitmq的相關(guān)資料,springboot集成RabbitMQ非常簡單,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
java自定義任務(wù)類定時(shí)執(zhí)行任務(wù)示例 callable和future接口使用方法
Callable是類似于Runnable的接口,實(shí)現(xiàn)Callable接口的類和實(shí)現(xiàn)Runnable的類都是可被其它線程執(zhí)行的任務(wù)2014-01-01
數(shù)據(jù)結(jié)構(gòu)與算法之并查集(不相交集合)
并查集是一種挺高效的數(shù)據(jù)結(jié)構(gòu)。實(shí)現(xiàn)簡單,只是所有元素統(tǒng)一遵從一個(gè)規(guī)律所以讓辦事情的效率高效起來。這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法——并查集(不相交集合),需要的朋友可以參考下2019-11-11
springboot aspect通過@annotation進(jìn)行攔截的實(shí)例代碼詳解
這篇文章主要介紹了springboot aspect通過@annotation進(jìn)行攔截的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Java并發(fā)編程中的CyclicBarrier線程屏障詳解
這篇文章主要介紹了Java并發(fā)編程中的CyclicBarrier線程屏障詳解,2023-12-12
Springboot在有鎖的情況下正確使用事務(wù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Springboot在有鎖的情況下如何正確使用事務(wù),今天通過一個(gè)實(shí)驗(yàn)給大家分析一下商品超賣問題,模擬場景分析通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
一文搞懂Java MD5算法的原理及實(shí)現(xiàn)
MD5信息摘要算法,一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。本文將詳解MD5算法的原理及實(shí)現(xiàn),感興趣的可以了解一下2022-06-06

