Соответствие 2 числам Regex PHP, исключая одну комбинацию - PullRequest
0 голосов
/ 19 марта 2019

У меня есть этот код:

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 ]

2 голосов
/ 19 марта 2019

Просто отрицательный прогноз для 00, затем повторите две цифры:

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

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

Это позволяет COD0, хотя - если это нежелательно, то шаблонне должно включать чередование |0:

/^COD(?!00)[0-9]{2}$/
1 голос
/ 19 марта 2019

Вам необходимо указать первые 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);
...