#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, правильно, можно явно перечислить только допустимые значения и сделать из этого действительно длинное регулярное выражение, но это может быть непрактично, а иногда даже невозможно