1. 程式人生 > >java正則表示式的學習

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.html

Matcher 類的方法

索引方法提供了有用的索引值,精確表明輸入字串中在哪能找到匹配:


研究方法用來檢查輸入字串並返回一個布林值,表示是否找到該模式:


替換方法是替換輸入字串裡文字的方法:


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