在Java編程中使用Regex_java

來源:互聯網
上載者:User

在程式設計過程中,經常需要對輸入的資料格式進行檢查,這時就會用到Regex,匹配Regex則資料格式正確,否則格式錯誤。為了檢查輸入的資料是否滿足某種格式,可以使用String類的matches()方法進行判斷,文法格式如下:

boolean matches(String regex)

regex:指定的Regex。
傳回值:返回boolean類型。
該方法用於告知當前字串是否匹配參數regex指定的Regex,傳回值是boolean類型,如果當前字串與Regex匹配,則該方法返回true,否則返回false。

Regex是由一些含有特殊意義的字元組成的字串,這些含有特殊意義的字元稱為元字元,下面列出了Regex的部分元字元,在Regex的寫法中,要在下列元字元的前面添加“\”符號進行轉譯,例如元字元“\d”在Regex的寫法中是“\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}:控制字元。

在使用 Regex時,如果需要某一類型的元字元多次輸出,逐個輸入就相當麻煩,這時就可以使用Regex的限定字元來重複次數,下面列出了常用限定符及其含義。

?:0次或1次。
*:0次或多次。
+:0次或1次。
{n}:重複n次。
{n,}:至少重複n次。
{n,m}:重複n~m次。

在Regex中還可以用方括弧把多個字元括起來,方括弧中各種Regex代表不同的含義,下面列出了方括弧中元字元及其含義。

[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:驗證車牌號* @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、手機號碼:

/*** * @description:驗證手機號碼* @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;}


手機號+固定電話:010-1111111,15516985859,0377-1111111

//java檢測是否為電話號碼(手機、固定電話驗證)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只能用一次,第二次調用後都為false legalPhone = importPotentialBFOs[i].getLegalPhone(); uploadTmp.setLegalTelephone(legalPhone);}else{ throw new BizException("聯絡電話格式錯誤!");}

3.實數:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.