java 正則表達式的使用

概述:

正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。【百度百科】

正則常用符號

預定義字符
符號 說明
. 任何字符(與結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字:[^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]匹配包括下劃線的任何單詞字符。類似但不等價於“[A-Za-z0-9_]”,這裏的”單詞”字符使用Unicode字符
\W 非單詞字符:[^\w]
\轉義字符 “\”匹配”\”
量詞
符號 說明
* 等價於{0,} 匹配前面子表達式0次或多次,如fuck* 能匹配fuc fuck fuckk fuckkkk。
+ 等價於{1,} 匹配前面子表達式一次或多次,如8+ 匹配8,88,888。
? 等價於{0,1} 匹配前面子表達式零次或一次。
{n} 匹配確定的n次。如a{2}不能匹配and中的a,但是能匹配aand中的兩個aa。
{n,} 至少匹配n次。如e{2,}不能匹配bed中的e,但是能匹配seeeed中的所有e。
{n,m} 最少匹配n次,且最多匹配m次。如e{1,3},將匹配seeeeed中的前三個e。
量詞後綴
符號 說明
在量詞後面加?,表示將正則默認的貪婪匹配改爲勉強模式。
+ 在量詞後邊加+,表示將正則默認的貪婪模式改爲侵佔模式。

說明:

邊界匹配字符
符號 說明
^ 行的開頭。
$ 行的結尾。
\b 單詞的邊界。
\B 非單詞的邊界。
邏輯字符
符號 說明
如:abc 表示只有同時出現a、b、c三個字符才能匹配。
|或 如:f(oo|ee)t 表示匹配foot或feet。
^非 表示邏輯反的意思,如:^a表示匹配非a的字符。
其它常見字符
[] 使用說明
[abc] 匹配a、b 或 c(簡單類)。
[^abc] 匹配除了a、b、c之外的字符。
[a-zA-Z] 匹配所有字母。a到z或A到Z。
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](並集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
() 組使用說明,捕獲組可以通過從左到右計算其開括號來編號。
(\d) 一組匹配數字。
(\d{4})-(\d{2}-(\d\d)) 輸入內容2018-03-07,第一組完全匹配2018-03-07,第二組匹配(\d{4}匹配2018),第三組((\d{2}-(\d\d))匹配03-07,第四組(\d\d)匹配07

正則例子

正則匹配:
    public static void main(String[] args) {

        /**
         * 正則表達式:驗證漢字
         */
        final String REGEX_CHINESE = "^[\u4e00-\u9fa5]+$";

        /**
         * 正則表達式:驗證QQ
         */
        final String REGEX_QQ = "\\d{5,15}";
        /**
         * 正則表達式:驗證用戶名
         */
        final String REGEX_USERNAME = "^[a-zA-Z]\\w{3,20}$";

        /**
         * 正則表達式:驗證密碼
         */
        final String REGEX_PASSWORD = "^[a-zA-Z0-9]{6,16}$";
        /**
         * 正則表達式:驗證郵箱
         */
        final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";

        // 匹配QQ
        String qq = "553045444";
        boolean qFlag = qq.matches(REGEX_QQ);
        if (qFlag) {
            System.out.println(qq + "是qq號碼");
        } else {
            System.out.println(qq + "不是qq號碼");
        }

        // 匹配漢字一個或多個
        String chinese = "張好";
        boolean cFlag = chinese.matches(REGEX_CHINESE);
        if (cFlag) {
            System.out.println(chinese + "合法");
        } else {
            System.out.println(chinese + "不合法");
        }

        // 匹配用戶名
        String user = "z_ni_0hao";
        boolean uFlag = user.matches(REGEX_USERNAME);
        if (uFlag) {
            System.out.println(user + "合法");
        } else {
            System.out.println(user + "不合法");
        }

        // 匹配密碼
        String pass = "aaaa432";
        boolean pFlag = pass.matches(REGEX_PASSWORD);
        if (pFlag) {
            System.out.println(pass + "合法");
        } else {
            System.out.println(pass + "不合法");
        }
        }
正則查找、分割、替換:
    public static void main(String[] args) {
        //查找
        String text    ="This is the text which is to be searched " +"for occurrences of the word 'is'.";               
        String patternString = "is";                
        Pattern pattern = Pattern.compile(patternString);               
        Matcher matcher = pattern.matcher(text);
        int count = 0;
        while(matcher.find()) {             
            count++;                
            System.out.println("found: " + count + " : "  + matcher.start() + " - " + matcher.end());               
        }
        //正則分組查找
        String groupRegex = "(\\d{4})-(\\d{2}-(\\d{2}))";
        String groupContent = "2018-03-07";
        Pattern gPattern = Pattern.compile(groupRegex);
        Matcher gMatcher =gPattern.matcher(groupContent);

        while(gMatcher.find()){
        int counts = gMatcher.groupCount();
        for(int i =0;i<=counts;i++){
            System.out.println(gMatcher.group(i));
            }           
        }

        //分割
        String content = "ni1234ni12ni4354235ni33";
        String regex = "\\d{4}";
        String []splitContent = content.split(regex);
        for(String splits : splitContent){
            System.out.println(splits);

        }

        //替換
        String repleace  = content.replaceAll(regex, "#");
        System.out.println(repleace);

    }

希望對你有所幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章