java正則表示式的學習
正則表示式定義了字串的模式。可以用來搜尋、編輯或處理文字。並不僅限於某一種語言,但是在每種語言中有細微的差別。
正則表示式java.util.regex 包主要包括以下三個類:
- Pattern 類:
pattern 物件是一個正則表示式的編譯表示。Pattern 類沒有公共構造方法。要建立一個 Pattern 物件,你必須首先呼叫其公共靜態編譯方法,它返回一個 Pattern 物件。該方法接受一個正則表示式作為它的第一個引數。
- Matcher 類:
Matcher 物件是對輸入字串進行解釋和匹配操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要呼叫 Pattern 物件的 matcher 方法來獲得一個 Matcher 物件。
- PatternSyntaxException:
PatternSyntaxException 是一個非強制異常類,它表示一個正則表示式模式中的語法錯誤。
捕獲組
捕獲組是把多個字元當一個單獨單元進行處理的方法,它通過對括號內的字元分組來建立。
例如,正則表示式 (dog) 建立了單一分組,組裡包含"d","o",和"g"。
捕獲組是通過從左至右計算其開括號來編號。例如,在表示式((A)(B(C))),有四個這樣的組:
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
可以通過呼叫 matcher 物件的 groupCount 方法來查看錶達式有多少個分組。groupCount 方法返回一個 int 值,表示matcher物件當前有多個捕獲組。
還有一個特殊的組(group(0)),它總是代表整個表示式。該組不包括在 groupCount 的返回值中。
例項:public class RegexMatches { public static void main( String args[] ){ // 按指定模式在字串查詢 String line = "This order was placed for QT3000! OK?"; String pattern = "(\\D*)(\\d+)(.*)"; // 建立 Pattern 物件 Pattern r = Pattern.compile(pattern); // 現在建立 matcher 物件結果:Matcher m = r.matcher(line); if (m.find( )) { System.out.println("Found value: " + m.group(0) ); System.out.println("Found value: " + m.group(1) ); System.out.println("Found value: " + m.group(2) ); System.out.println("Found value: " + m.group(3) ); } else { System.out.println("NO MATCH"); } } }
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000
Found value: ! OK?
public static void main(String[] args) { String pattern = "^\\/user\\/[a-zA-Z0-9]+\\/self_password$"; Pattern p = Pattern.compile(pattern); System.out.print(p.matcher("/user/iiii44/self_password").matches()); }
正則表示式語法:
常用正則表示式:
驗證數字:^[0-9]*$驗證n位的數字:^\d{n}$驗證至少n位數字:^\d{n,}$驗證m-n位的數字:^\d{m,n}$驗證零和非零開頭的數字:^(0|[1-9][0-9]*)$驗證有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$驗證有1-3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$驗證非零的正整數:^\+?[1-9][0-9]*$驗證非零的負整數:^\-[1-9][0-9]*$驗證非負整數(正整數 + 0) ^\d+$驗證非正整數(負整數 + 0) ^((-\d+)|(0+))$驗證長度為3的字元:^.{3}$驗證由26個大寫英文字母組成的字串:^[a-z]+$驗證由26個小寫英文字母組成的字串:^[a-z]+$驗證由數字和26個英文字母組成的字串:^[a-za-z0-9]+$驗證由數字和26個英文字母9位組成的字串:^[0-9a-zA-Z]{9}$驗證由數字、26個英文字母或者下劃線組成的字串:^\w+$驗證使用者密碼:^[a-za-z]\w{5,17}$ 正確格式為:以字母開頭,長度在6-18之間,只能包含字元、數字和下劃線。驗證是否含有 ^%&',;=?$\" 等字元:[^%&',;=?$\x22]+驗證漢字:^[\u4e00-\u9fa5],{0,}$驗證Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$驗證InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-za-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$驗證電話號碼:^(\d3,4\d3,4|\d{3,4}-)?\d{7,8}$:--正確格式為:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。驗證身份證號(15位或18位數字):^\d{15}|\d{18}$驗證一年的12個月:^(0?[1-9]|1[0-2])$ 正確格式為:“01”-“09”和“1”“12”驗證一個月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正確格式為:01、09和1、31。整數:^-?\d+$非負浮點數(正浮點數 + 0):^\d+(\.\d+)?$正浮點數 : ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$非正浮點數(負浮點數 + 0): ^((-\d+(\.\d+)?)|(0+(\.0+)?))$負浮點數: ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$浮點數: ^(-?\d+)(\.\d+)?匹配所有鍵盤上可見的非字母和數字的符號:((?=[\x21-\x7e]+)[^A-Za-z0-9])匹配所有鍵盤上所有可見的非字母和數字的符號:((?=[\x21-\x7e]+)[^A-Za-z0-9])/g匹配包括換行符在內的任意字元: ([\s\S]*) 同時,也可以用 “([\d\D]*)”、“([\w\W]*)” 來表示;([\s\S]*?) 加上問號 表示最短匹配匹配長度為1-20的任意字元:public class RegexDemo { public static void main(String[] args) { String pattern = "([\\s\\S]){1,20}"; Pattern p = Pattern.compile(pattern); System.out.print(p.matcher("12345678908-哈哈rrrurr!").matches()); } }
正則表示式枚舉出 數字 0 1 : String str = "^(0|1)$";
密碼校驗可參考:https://www.cnblogs.com/cexm/p/7737538.htmlMatcher 類的方法
索引方法提供了有用的索引值,精確表明輸入字串中在哪能找到匹配:
研究方法用來檢查輸入字串並返回一個布林值,表示是否找到該模式:
替換方法是替換輸入字串裡文字的方法:
PatternSyntaxException 類的方法
PatternSyntaxException 是一個非強制異常類,它指示一個正則表示式模式中的語法錯誤。
PatternSyntaxException 類提供了下面的方法來幫助我們檢視發生了什麼錯誤。
線上測試正則表示式工具:
以上內容參考:http://www.runoob.com/java/java-regular-expressions.html
更多學習參考:http://www.jb51.net/tools/zhengze.html
轉載自:http://blog.csdn.net/u010690647/article/details/78092880