preg_match for string不起作用

时间:2014-06-14 08:07:44

标签: php

我有像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]。但是我的代码没有用。

4 个答案:

答案 0 :(得分:3)

你需要在你的角色类之后放置量词:

'/p[0-9]+t[0-9]+-[A-Za-z]+/'

答案 1 :(得分:2)

这个正则表达式适合你:

/p(\d+)t(\d+)-(\w+)/g

Demo

<强>阐释:

p匹配字母p

\d+匹配数字0-9

t匹配字母t

\d+匹配数字0-9

-匹配破折号' - '

\W+匹配任何单词字符[a-zA-Z0-9_] 并抓住所有比赛。

我也不是正则表达式方面的专家,但在http://www.regex101.com上尝试多个选项会有所帮助,因为它会在右侧面板中显示字符的解释。希望它在将来有所帮助:))

答案 2 :(得分:1)

如果您总是要有一定数量的数字,您也可以使用:

 /^p[0-9]{2}t[0-9]{4}-[A-Za-z]+$/

以下是RegExr的示例:http://www.regexr.com/390ds

答案 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]+,其中+代表“至少出现一次”。