我有像p88t9014-name
这样的字符串,p
用于产品,t
用于子产品ID
在-
之后,name
是用户定义的任何名称。
我尝试将字符串与preg_match
匹配此代码::
$name="p88t0056-name";
if(preg_match('/p[0-9]t[0-9]-[A-Z,a-z]/',$name,$match)) {
echo "yes";
} else {
echo "No";
}
print_r($m);
我只是尝试匹配格式,如果这是格式p[number]t[number]-[anystring]
。但是我的代码没有用。
答案 0 :(得分:3)
你需要在你的角色类之后放置量词:
'/p[0-9]+t[0-9]+-[A-Za-z]+/'
答案 1 :(得分:2)
这个正则表达式适合你:
/p(\d+)t(\d+)-(\w+)/g
<强>阐释:强>
p
匹配字母p
\d+
匹配数字0-9
t
匹配字母t
\d+
匹配数字0-9
-
匹配破折号' - '
\W+
匹配任何单词字符[a-zA-Z0-9_]
并抓住所有比赛。
我也不是正则表达式方面的专家,但在http://www.regex101.com上尝试多个选项会有所帮助,因为它会在右侧面板中显示字符的解释。希望它在将来有所帮助:))
答案 2 :(得分:1)
答案 3 :(得分:0)
[0-9]
中的只匹配一个字符,[A-Z,a-z]
也匹配,因此$ name与您提供的模式不匹配。像“p8t0-A”和“p0t2”这样的字符串通过了测试。
此外,您的模式中的另一个问题是:[A-Z,a-z]
不仅匹配字母,还匹配,
(单个逗号)。我想你需要的模式是p[0-9]+t[0-9]+-[A-Za-z]+
,其中+
代表“至少出现一次”。