正則表達式

使用正則表達式的目的正則表達式


 

    (查找)/(取出)/(匹配) 符合 條件 的某個字符或字符串;bash

 

正則表達式圖標url


  • 正則很無情 ( 注意準確性 );
  • 正則很大度 ( 貪婪匹配 );
  • 別忘 '\';

正則表達式層次spa


 

基礎正則表達式code

                     

 

擴展正則表達式server

                     

 

常見的轉義字符blog


                      

 

正則使用方式舉例字符串


 

「^\d+$」                       //非負整數(正整數 + 0)  
「^[0-9]*[1-9][0-9]*$」         //正整數  
「^((-\d+)|(0+))$」             //非正整數(負整數 + 0)  
「^-[0-9]*[1-9][0-9]*$」        //負整數  
「^-?\d+$」                     //整數  
「^\d+(\.\d+)?$」               //非負浮點數(正浮點數 + 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+)?)|(0+(\.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+)?$」           //浮點數  
「^[A-Za-z]+$」                 //由26個英文字母組成的字符串  
「^[A-Z]+$」                    //由26個英文字母的大寫組成的字符串  
「^[a-z]+$」                    //由26個英文字母的小寫組成的字符串  
「^[A-Za-z0-9]+$」              //由數字和26個英文字母組成的字符串  
「^\w+$」                       //由數字、26個英文字母或者下劃線組成的字符串  
^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$                     // 郵箱
「^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$」                               //url  
/^(\d{2}|\d{4})-((0([1-9]{1}))|(1[12]))-(([0-2]([1-9]{1}))|(3[01]))$/                  // 年-月-日  
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/                  // 月/日/年  
「^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$」   //Email  

 

 

正則表達式單字符class


 

// 特定字符: 某個具體的字符 (例如 "1" , "a" )
[root@server ~]# grep '1' passwd
    bin:x:1:1:bin:/bin:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ......
    
// 範圍內字符:
    // ** 單個字符 [] (例如 [0-9], [259] , [a-z] , [A-Z] , [bcdq] , [a-zA-Z] , [,:_/])
    // ** 配置範圍中的單個字符;可混合寫,直接範圍拼接就行 (例如 [a-zA-Z0-9:,_/])
    // ** 反向字符 ^ (例如 [^0-9] , [^0] )
[root@server ~]# grep '[0-9]' passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    ......
[root@server ~]# grep '[259]' passwd    // 縮小範圍
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    ......
[root@server ~]# grep '[a-g]' passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ......
[root@server ~]# grep '[^0-9]' passwd       // 取反
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
// 任意字符
    // ** 表明任何一個字符 '.' ; *** 注意 '[.]' 和 '\.' 的區別;
[root@server ~]# grep '.' passwd        // 匹配任意字符
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
[root@server ~]# grep '[.]' passwd      // 此處爲匹配'.';
[root@server ~]# grep '\.' passwd       // 轉義爲普通的'.',而非任意字符;
// 邊界字符
    // ** 頭尾字符  ^ (頭字符) : ^root  表示以什麼開頭;    ** 注意與[^]的區別;
                //  $ (尾字符) : false$ 表示以什麼結尾;
                //  ^$ 表示空行;
[root@server ~]# grep '^root' passwd
    root:x:0:0:root:/root:/bin/bash
[root@server ~]# grep 'false$' passwd
// 元字符(表明普通字符或特殊字符)
    // ** \w: 匹配任何字類字符,包括下劃線,等同於 [a-zA-Z0-9_]
    // ** \W: 匹配任何非字類字符,等同於 [^a-zA-Z0-9_]
    // ** \b: 表明單詞的分割;
[root@server ~]# grep '\bx\b' passwd    // 只匹配放置密碼的單個 'x',而不匹配單詞中的x;
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
......  

 

 

正則表達式字符組合基礎


 

// 字符串
    // ** 'root'  '1000'  'r..t' 
    [root@server ~]# grep 'root' passwd     // 匹配root字符串
        root:x:0:0:root:/root:/bin/bash
        operator:x:11:0:operator:/root:/sbin/nologin
    [root@server ~]# grep 'r..t' passwd     // 匹配r與t中間兩個任意的字符;
        root:x:0:0:root:/root:/bin/bash
        operator:x:11:0:operator:/root:/sbin/nologin
        ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    // ** '[A-Z][a-z]'  '[0-9][0-9]'
    [root@server ~]# grep '[A-Z][a-z]' passwd
        ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
        nobody:x:99:99:Nobody:/:/sbin/nologin
        dbus:x:81:81:System message bus:/:/sbin/nologin
        ...
    // *** 重複 (se)*-->針對字符串的重複,正則表達式中()也須要加上'\',如'\(se\)*';
        // *: 零次或者屢次匹配前面的字符或子表達式;
        // +: 一次或者屢次匹配前面的字符或子表達式; (須要配合'\'使用)
        // ?: 零次或者一次匹配前面的字符或子表達式; (一樣須要配合'\'使用)
        // {n,m}: 重複特定次數  grep '[0-9]\{2,3\}' passwd

    // *** 任意字符串 '.*'  例如:^r.*  m.*t  (貪婪匹配)
    // *** 邏輯的表示 '|'   例如:'/bin\(false\|true\)'    

 

 

正則表達式案例


 

 

// 案例一, 匹配4-10位的QQ號
    [root@server ~]# grep '\b[0-9]\{4,10\}\b' qq.txt
    [root@server ~]# grep '^[0-9]\{4,10\}$' qq.txt
    
// 案例二, 匹配15位或18位的身份證號(支持帶X的)
    // 分析: 身份證號開頭不能是0,結尾有可能爲X,兩頭肯定好,中間爲13或16的邏輯與.
    [root@server ~]# grep '^[1-9]\([0-9]\{13\}\|[0-9]\{16\}\)[0-9xX]$' cert.txt
    
// 案例三, 匹配密碼(由數字,26個字母和下劃線組成)
    // 分析: 按描述,肯定\w可符合,重複一次或者屢次
    [root@server ~]# grep '^\w\+$' cert.txt
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息