1. 程式人生 > >正則(PHP和JS)

正則(PHP和JS)

警告:這不是詳細說明正則怎麼寫的文章。

一、正則表示式

  1. 時間:小時 00-23 '/(^[0-1][0-9]$)|(^2[0-3]$)/';
  2. 時間:分鐘 00-59 '/^[0-5][0-9]$/';
  3. 手機號:1開頭,第二個是3或4或5或7或8,後邊9位數字結尾 '/^1[3|4|5|7|8]\d{9}/';
  4. 郵箱 '/^[\w-]{4,}@[\w]+\.(com|cn)$/';

二、PHP正則方法

  1. preg_match() 返回值匹配次數 0 或 1,第一次匹配後停止搜尋。
    $str = 'abcdef';
    //用法一,根據返回值判斷字串是否符合正則
    echo preg_match('/abc/',$str); #輸出1
    //用法二,傳入第三個引數,取址生成一個數組。
    //一般來說,我們只關心匹配到的陣列第0項,為正則匹配到的結果。 //如果使用括號,會依次拆分匹配項。 preg_match('/(bc)(de)/',$str,$match); print_r($match); //Array ( [0] => bcde [1] => bc [2] => de )
  2. preg_match_all()類似上邊,返回值匹配次數 0 或 n。
    $str = 'ABCdeABC';
    //用法一
    echo preg_match_all('/ABC/',$str);#輸出2
    //用法二,match變成二維陣列。
    preg_match_all('/ABC(de)?/',$str,$match
    ); print_r($match); //[['ABCdeABC','ABC'],['de',null]]
  3. preg_replace() 返回替換後的字串
    $str = 'ABCdeABC';
    echo preg_replace('/ABC/','abc',$str);# 輸出abcdeabc
    
  4. preg_grep() 返回匹配到的陣列
    $arr1 = ['ABCdeABC','abc','ABC'];
    $arr2 = preg_grep('/ABC/',$arr1);
    print_r($arr2);
    //Array ( [0] => ABCdeABC [2] => ABC )
    

三、JS正則寫法

  1. 語法直接量/pattern/attributes
    var str = 'abc123de';
    /[a-z]/g; // 注意,
    
  2. 建立 RegExp 物件的語法new RegExp(pattern, attributes)
    var regexp = new RegExp(/[a-z]/,'g');
    

    注1:JS的正則是不需要單引號或者雙引號包著的。 注2:關於attributes i 執行對大小寫不敏感的匹配。 g 執行全域性匹配(查詢所有匹配而非在找到第一個匹配後停止)。 m 執行多行匹配。

四、JS正則方法

  1. regexp.test() 檢索,字串是否符合正則表示式,返回 true 或 false
    /abc/i.test('ABCdeABC'); //true
    
  2. regexp.exec() 匹配, 無則返回null
    var str = "ABCdeABC"; 
    var regexp = new RegExp("ABC","g");
    var result;
    
    while ((result = regexp.exec(str)) != null)  {
    	console.log(result,result.index,regexp.lastIndex);
    }
    

五、JS字串方法中的正則

  1. str.search() 搜尋,返回第一個與正則匹配的子串位置, 無返回-1。
    var str = 'ABCdeABC';
    str.search(/BC/);//返回1 
    //如果明確搜尋什麼,還是用indexOf('BC')吧...
    
  2. str.match() 匹配,返回匹配到的陣列, 無則返回null
    str.match(/abc/ig);//返回 ['ABC','ABC']
    
  3. str.replace()替換,返回替換後的字串
    str.replace(/abc/i,"");//返回deabc
    str.replace(/abc/ig,"");//返回de
    //隱藏手機號中間四位
    '15388880131'.replace(/(\d{3})(\d{4})(\d{4})/,"$1****$3");
    //返回153****0131,這裡$1,$2,$3分別代表3個()的匹配項。