Как мне исключить определенные числа из выражения регулярного выражения?

#regex

#регулярное выражение

Вопрос:

У меня есть следующее выражение регулярного выражения.

 [1-9][0-9].[0-9][0-9]
  

Он сопоставляет числа от 10.00 до 99.99 с шагом .01 (например, 11.00 или 11.44, или 65.90).

Допустим, у меня есть два числа, которые я хотел бы исключить из этого диапазона. 13.00 и 44.51.

Как мне добавить это условие в выражение?

Поворот: я использую Google Forms для проверки этого, и он не распознает отрицательные взгляды (!? …)

Кто-нибудь знает, как я буду решать эту проблему?

Ответ №1:

Отрицательные прогнозы подходят для этой работы, но, к сожалению, не все движки регулярных выражений поддерживают их. Таким образом, обходной путь заключается в том, чтобы выполнить положительное совпадение и вместо этого отбросить.

Например

 (?:13.00|44.51)|([1-9][0-9].[0-9][0-9])
  

Принять, только если 1 сопоставлена группа, иначе отбросить (это означает, что вместо этого были сопоставлены неправильные числа)

PS: В ответе предполагается, что можно проверить, какая часть регулярного выражения соответствует и отбрасывается, если группа не 1 соответствует. Предполагается, что он не должен работать без дополнительной логики программирования, этого могут достичь только негативные прогнозы.

Комментарии:

1. Я использовал это регулярное выражение, но, похоже, оно принимает 13 и 44,51. Вот моя форма: forms.gle/N65b9RD58QHbpS6p7

2. В ответе предполагается, что можно проверить, какая часть регулярного выражения соответствует и отбрасывается, если не соответствует группе 1. предполагается, что он не должен работать без дополнительной логики программирования, этого могут достичь только негативные прогнозы

3. Ах, хорошо, я думаю, это ограничение использования Google forms. Спасибо за вашу помощь.

4. Ну, технически вы все равно можете сделать это без негативного прогноза, если вы хотите вручную сделать регулярное выражение длиннее, что-то вроде ([235-9][0-9].[0-9][0-9]|1[0-24-9].[0-9][0-9]|13.[1-9][0-9]|13.0[1-9]|4[0-35-9].[0-9][0-9]|44.[0-46-9][0-9]|44.5[02-9])

5. @justhalf, правильно, можно явно перечислить только допустимые значения и сделать из этого действительно длинное регулярное выражение, но это может быть непрактично, а иногда даже невозможно