2015-04-02 130 views
0

我想匹配這樣的字符串:3個字母后面有一個空格正則表達式後面一個數字

ABC 123 

我在PHP代碼中使用正則表達式的嘗試:

preg_match('/^[A-Z]{3}[ ]{3}[0-9]{3}&/', $class_code) 

但它似乎符合甚至像字符串這樣:

ABC jsfdkajf 123 

它應該給這個字符串錯誤,但它給人一種MATC H。我究竟做錯了什麼?

+0

的符號'&'在最終應該是美元符號'$'。 – 2015-04-02 22:58:23

回答

0

這個表達式應該爲你工作:

^\w{3}\s?\d{3}$ 

示例代碼:

<?php 

    $str = "ABC jsfdkajf 123"; //"ABC 123" 
    if(!preg_match('/^\w{3}\s?\d{3}$/', $str)) 
     echo "no "; 
    echo "match"; 

?> 

輸出:

no match //match 

正則表達式的解釋:

^\w{3}\s?\d{3}$ 
在一行
  • \ W {3}匹配的開始
    • ^斷言位置的任何字符[A-ZA-Z0-9_]
      • 量詞:{3}恰好3次
    • \ s?匹配任何空格字符[\ r \ n \ t \ f]
      • 量詞:之間零和一時間,儘可能,用之於根據需要多次[貪婪]
    • \ d {3}匹配一個數字[0-9]
      • 量詞:{3-在一行的結束}恰好3次
    • $斷言位置

    有用的正則表達式鏈接:

  • 0

    與您正則表達式的問題是,要嚴絲合縫3位,但你只有1 ABC 123

    在PHP中,你可以使用Unicode字符集,我會和他們一起去。

    正則表達式:^\p{Lu}{3}\p{Zs}+\p{N}{3}$

    • ^ - 線
    • \p{Lu}{3}的開始 - 三個大寫字母
    • \p{Zs}+ - 任何數量的空格(根據需要進行調整,還包括硬盤空間)
    • \p{N}{3} - 三個數字完全相同
    • $ - 行結束

    下面是一個簡單的PHP代碼:

    $re = "/^\p{Lu}{3}\p{Zs}+\p{N}{3}$/"; 
    $str = "ABC 123"; 
    preg_match_all($re, $str, $matches); 
    print_r($matches[0]); 
    

    輸出and a link to a sample program

    [0] => ABC 123 
    
    0

    爲了您的正則表達式,你必須改變:

    preg_match('/^[A-Z]{3}[ ]{3}[0-9]{3}&/', $class_code) 
    

    preg_match('/^[A-Z]{3}[ ][0-9]{3}$/', $class_code) 
               ^--- use this instead & 
    

    順便說一句,你可以使用這樣的正則表達式:

    ^[A-Za-z]{3} \d{3}$ 
    

    Regular expression visualization

    或者使用不敏感的標誌:

    ^[a-z]{3} \d{3}$  
    

    Working demo

    $re = "/^[a-z]{3} \\d{3}$/mi"; 
    $str = "ABC 123\nABC 1\n"; 
    
    preg_match_all($re, $str, $matches); 
    

    另一種看法是,你貼「3個字母后跟一個空格,接着是一個數字」,所以如果你只需要一個在最後的數字,你可以使用:

    ^[A-Za-z]{3} \d$