匹配2个正则表达式PHP,但不包括一种组合

时间:2019-03-18 23:27:17

标签: php regex preg-match

我有此代码:

preg_match('/^COD([0-9][1-9]|0)$/', $input_line, $output_array);

我想匹配CODXX,其中XX可以从01到99。

除了COD10以外,这种方式与所有匹配 COD20等...

如果我使用

preg_match('/^COD([0-9][0-9]|0)$/', $input_line, $output_array);

这种方式是全部匹配,包括COD00,这是不允许的...

有什么解决办法吗?

预先感谢

2 个答案:

答案 0 :(得分:2)

00进行负向查找,然后重复两位数字:

/^COD(?:(?!00)[0-9]{2}|0)$/

https://regex101.com/r/wHL9Wg/1

这允许COD0,但是-如果不希望如此,则该模式不应包含|0交替:

/^COD(?!00)[0-9]{2}$/

答案 1 :(得分:1)

您需要在正则表达式中分别指定前导0值,以排除COD00

preg_match('/^COD(0[1-9]|[1-9][0-9])$/', $input_line, $output_array);

如果您想要匹配COD0,请将|0留在正则表达式中:

preg_match('/^COD(0[1-9]|[1-9][0-9]|0)$/', $input_line, $output_array);