我正在尝试匹配这样的字符串:
ABC 123
我尝试在我的PHP代码中使用这个正则表达式:
preg_match('/^[A-Z]{3}[ ]{3}[0-9]{3}&/', $class_code)
但它似乎甚至匹配像这样的字符串:
ABC jsfdkajf 123
它应该为这个字符串赋予false,但是它给出了匹配。我做错了什么?
答案 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}$
有用的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}$
或使用不敏感标志:
^[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$