正则表达式为3个字母,后跟一个空格,后跟一个数字

时间:2015-04-02 22:56:36

标签: php regex

我正在尝试匹配这样的字符串:

ABC 123

我尝试在我的PHP代码中使用这个正则表达式:

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

但它似乎甚至匹配像这样的字符串:

ABC jsfdkajf 123

它应该为这个字符串赋予false,但是它给出了匹配。我做错了什么?

3 个答案:

答案 0 :(得分:0)

此regEx应该适合您:

^\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

regEx解释:

^\w{3}\s?\d{3}$
  • ^ 在一行开头断言位置
  • \ w {3} 匹配任何字词[a-zA-Z0-9_]
    • 量词: {3} 正好3次
  • \ s?匹配任何空格字符[\ r \ n \ t \ f]
    • 量词:在零到一次之间,尽可能多次,根据需要回馈[贪心]
  • \ d {3} 匹配数字[0-9]
    • 量词: {3} 正好3次
  • $ 在一行结束时断言位置

有用的regEx链接:

答案 1 :(得分:0)

你的正则表达式的问题在于你想要恰好匹配3个空格,但ABC 123只有1个。

在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 

答案 2 :(得分: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$