Что такое регулярное выражение, которое соответствует всем числам, кроме 1, 2 и 25?

1

Там ввод строк, состоящий из цифр, т.е. Целых чисел. Как написать регулярное выражение, которое будет принимать все числа, кроме чисел 1, 2 и 25?

Я хочу использовать это внутри идентификатора записи BeanIO (который поддерживает регулярное выражение), чтобы пропустить некоторые записи, которые имеют определенные значения.

Я достигаю этой точки ^(1|2|25)$, но я хотел, чтобы противоположность того, что это соответствует.

  • 3
    во-первых, какой язык вы используете? а во-вторых, как насчет того, что вы уже пробовали?
  • 0
    Почему вы так собираетесь использовать регулярные выражения для этого? Похоже, вы должны просто сделать atoi() или аналогичный и сравнить фактические числа, или даже просто сравнить строки напрямую.
Показать ещё 2 комментария
Теги:
regex-negation
bean-io

4 ответа

8
Лучший ответ

Не то, чтобы regex - лучший инструмент для этого, но если вы настаиваете...

Используйте отрицательный результат:

/^(?!(?:1|2|25)$)\d+/

См. Здесь в действии: http://regexr.com/39df2

  • 0
    Это сработало для меня! Большое спасибо за помощь!
2

Вы можете использовать такой шаблон:

^([03-9]\d*|1\d+|2[0-46-9]\d*|25\d+)$

Или, если ваш реджикс-движок поддерживает его, вы можете просто использовать отрицательное утверждение lookahead ((?!…)) следующим образом:

^(?!1$|25?$)\d+$

Тем не менее, вам, вероятно, будет лучше просто разобрать номер в коде и убедиться, что он не соответствует одному из запрещенных значений.

0
  (?!^1$|^2$|^25$)(^\d+$)

Это должно работать для вашего дела.

0

qaru.site/questions/427609/....

Вы не должны пытаться писать такое регулярное выражение, так как большинство языков не поддерживают дополнение регулярных выражений.

Вместо этого вы должны написать регулярное выражение, которое соответствует только этим трем вещам: ^(1|2|25)$ - и затем в вашем коде вы должны проверить, соответствует ли это регулярное выражение \d+ и не соответствует этому другому один, например:

'if($myStr =~ m/\d+/ && !($myStr =~ m/^(1|2|25)$/))'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню