有人可以告诉我我做错了什么吗?这是接受一切匹配。
if (preg_match("/^[A-Z][a-z][a-z][0-9]|[1-9][0-9]|1[0-4][0-9]|15[0-1]:[0-9]|[1-9][0-9]|1[0-6][0-9]|17[0-6]/", $_GET['id']))
{
echo "match";
}
else
{
echo "no match";
}
我希望它只匹配第一个字母是大写字母AZ,第二个字母是小写字母az,第三个字母是小写字母az,然后是1到150之间的数字,冒号:然后是一个介于1和176之间的数字。它应该与Abc150匹配:176 Zyx1:1但不是aBc151:177
答案 0 :(得分:5)
使用此:
^[A-Z][a-z]{2}(?:[1-9][0-9]?|1[0-4][0-9]|150):(?:[1-9][0-9]?|1[0-6][0-9]|17[0-6])$
请参阅demo。
^
声称我们位于字符串的开头[A-Z][a-z]{2}
匹配一个大写字母和两个小写字母(?:[1-9][0-9]?|1[0-4][0-9]|150)
匹配1到150之间的数字:
匹配冒号(?:[1-9][0-9]?|1[0-6][0-9]|17[0-6])
匹配1到176之间的数字$
断言我们在字符串在php中:
$regex = "~^[A-Z][a-z]{2}(?:[1-9][0-9]?|1[0-4][0-9]|150):(?:[1-9][0-9]?|1[0-6][0-9]|17[0-6])$~";
echo (preg_match($regex,$string)) ? "***Match!***" : "No match";
答案 1 :(得分:0)
你需要将表达式放在你的交替运算符(|)的parens中,否则它会左右对齐一切。如你所知,当你的意思是Aaa1或Aaa10时,它与Aaa1或10匹配。尝试:
/^[A-Z][a-z][a-z]([0-9]|[1-9][0-9]|1[0-4][0-9]|15[0-1]):([0-9]|[1-9][0-9]|1[0-6][0-9]|17[0-6])/