繁体   English   中英

字符串的preg_match不起作用

[英]preg_match for string not work

我有类似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] 但我的代码无法正常工作。

您需要在字符类之后放置量词:

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

此正则表达式将为您工作:

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

演示版

说明:

p匹配字母p

\\d+匹配数字0-9

t匹配字母t

\\d+匹配数字0-9

-匹配破折号'-'

\\W+匹配任何单词字符[a-zA-Z0-9_]和g以捕获所有匹配项。

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

如果您总是要有固定数量的数字,则还可以使用:

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

这是RegExr上的示例: http : //www.regexr.com/390ds

正则表达式[0-9]中的字符恰好匹配一个字符, [AZ,az]也正好匹配,因此$ name与您提供的模式不匹配。 诸如“ p8t0-A”和“ p0t2”之类的字符串通过了测试。

此外,您的模式中的另一个问题是: [AZ,az]不仅匹配字母,还匹配, (单个逗号)。 我猜您需要的模式是p[0-9]+t[0-9]+-[A-Za-z]+ ,其中+ s表示“至少发生一次”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM