1. 程式人生 > >正則表示式(校驗規則)

正則表示式(校驗規則)

正則表示式

說明

[abc]

a、b、c中任意一個字元

[^abc]

除了abc的任意一個字元

[a-z]

a-z中任意一個字元

[a-zA-Z0-9]

a-zA-Z0-9中任意一個字元

[a-z&&[^bc]]

a-z中除了bc的任意一個字元

知識點案例:

        String regex1="[a-z]";

        String

regex2="[^a-z]";

        String regex3="[a-z&&[^bc]]";

        System.out.println("a".matches(regex1));  //true

        System.out.println("0".matches(regex1));  //false

        System.out.println("a".matches(regex2));  //false

        System.out.println("0".matches(regex2));  //true

        System.

out.println("a".matches(regex3));  //true

        System.out.println("b".matches(regex3));  //false

正則表示式

說明

.

任意一個字元

\d

任意一個數字字元,相當於[0-9]

\w

單詞字元,相當於[a-zA-Z0-9_]

\s

空白字元,相當於[\t\n\f\r\x0B](x0B:匹配值為十六進位制的ASCII

字元;\r回車\f:換頁;\n:換行;\t:製表)

\D

非數字字元

\W

非單詞字元

\S

非空白字元

知識點案例:

        String regex1="\\d";

        String regex2="\\D";

        String regex3="\\s";

        String regex4="\\S";

        String regex5="\\w";

        String regex6="\\d";

        System.out.println("1".matches(regex1));  //true

        System.out.println("1".matches(regex2));  //false

        System.out.println(" ".matches(regex3));  //true

        System.out.println(" ".matches(regex4));  //false

        System.out.println("_".matches(regex5));  //true

        System.out.println("_".matches(regex6));  //false

正則表示式

說明

x?

0個或1個x

x*

0個或任意多個x

x+

1個或任意多個x

x{n}

n個x

x{n,}

n個到任意多個x

x{m,n}

m個到n個x

知識點案例:

        -6位數字

        -第一種匹配 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]

        -簡化1      \d\d\d\d\d\d

        -簡化2      \d{6}

知識點:分組“()”:

圓括號表示分組,圓括號內的正則表示式為一個整體,分組可以用“|”表示“或”

案例:

        匹配手機號前面的區號:

        (\+86|0026)?\s?\d{11}

        表示+86或者0086出現其中一個後接1個或0個空白字元後接11位任意數字

知識點:“^”和“$”

邊界匹配

    -^代表字串開始

    -$代表字串結束

案例:

匹配使用者名稱規則:從頭到尾連續8~10個單詞字元

    方法一:\w{8,10}

    方法二:^\w{8,10}$

對於字串“abcd1234_abcd”,方法一通過,方法二是不通過的,因為方法一隻看到前8到前10個字元,對於後面的字元不予匹配,所以只要前8到前10個字元滿足則通過驗證,而方法二則是匹配8-10個字元,從前8到前10,是有邊界結束的,因為並不是正好有8-10個字元,所以匹配失敗,驗證不通過。但是在我們用eclipse驗證時,發現方法一在驗證時也是不予通過的,原因會在接下來進行說明

String包含的正則方法

1.知識點:matches方法

作用:正則表示式與字串進行匹配,成功返回true

boolean matches(String regex)

案例

        String regex="[\\w.][email protected]([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}";

        String email="[email protected]";

        System.out.println(email.matches(regex));     //true

注意:matches()的引數底層實際上是^regex$

2.知識點:split方法

作用:將字串按照特定的分隔符拆分成字串陣列,即滿足正則表示式的字串作為分隔符,前後分割成元素,成為字串陣列
String[] split(String regex)

案例:

情況一:
String str="m-a-h-u-a-t-e-n-g";
String[] arr=str.split("-");
System.out.println(Arrays.toString(arr));
結果:[m, a, h, u, a, t, e, n, g]

情況二:
String str="-m-a-h-u-a-t-e-n-g";
String[] arr=str.split("-");
System.out.println(Arrays.toString(arr));
結果:[, m, a, h, u, a, t, e, n, g]

情況三:
String str="m-a-h-u-a-t-e-n-g-";
String[] arr=str.split("-");
System.out.println(Arrays.toString(arr));
結果:[m, a, h, u, a, t, e, n, g]

總結:null也可以作為一個數組元素,但是對於字串分割來說包前不包後,前面的null包括,後面的null捨去

3.知識點:replaceAll方法
作用:將符合正則表示式的字串替換為其他字元
String replaceAll(String regex,String replacement)

練習:1.使用者名稱註冊:
            使用者名稱要求:8~12位字元,不能含有空格,進行匹配提示;
            匹配成功,提示此使用者名稱可用,匹配失敗,提示此使用者名稱含有非法字元
            2.郵箱註冊
            郵箱名6~12位的單詞字元,字尾的名稱2~10位的單詞字元,最後接域名
            例:[email protected]

程式碼如下:

public class TextRegex {
    public static void main(String[] args) {
        String regex1="[\\w&&[^_]]{8,12}";
        String regex2="[\\w]{6,12}@[\\w]{2,10}(.com|.cn|.com.cn)";
        Scanner sc=new Scanner(System.in);
        while(true) {
            System.out.println("請輸入使用者名稱:");
            String username=sc.next();
            if(username.matches(regex1)) {
                System.out.println("使用者名稱可用!");
                break;
            }else {
                System.out.println("使用者名稱含有非法字元!");
            }
        }
        while(true) {
            System.out.println("請輸入郵箱");
            String mailname=sc.next();
            if(mailname.matches(regex2)) {
                System.out.println("郵箱可用!");
                break;
            }else {
                System.out.println("郵箱名含有非法字元!");
            }
        }
    }
}