Там ввод строк, состоящий из цифр, т.е. Целых чисел. Как написать регулярное выражение, которое будет принимать все числа, кроме чисел 1, 2 и 25?
Я хочу использовать это внутри идентификатора записи BeanIO (который поддерживает регулярное выражение), чтобы пропустить некоторые записи, которые имеют определенные значения.
Я достигаю этой точки ^(1|2|25)$
, но я хотел, чтобы противоположность того, что это соответствует.
Не то, чтобы regex - лучший инструмент для этого, но если вы настаиваете...
Используйте отрицательный результат:
/^(?!(?:1|2|25)$)\d+/
См. Здесь в действии: http://regexr.com/39df2
Вы можете использовать такой шаблон:
^([03-9]\d*|1\d+|2[0-46-9]\d*|25\d+)$
Или, если ваш реджикс-движок поддерживает его, вы можете просто использовать отрицательное утверждение lookahead ((?!…)
) следующим образом:
^(?!1$|25?$)\d+$
Тем не менее, вам, вероятно, будет лучше просто разобрать номер в коде и убедиться, что он не соответствует одному из запрещенных значений.
(?!^1$|^2$|^25$)(^\d+$)
Это должно работать для вашего дела.
qaru.site/questions/427609/....
Вы не должны пытаться писать такое регулярное выражение, так как большинство языков не поддерживают дополнение регулярных выражений.
Вместо этого вы должны написать регулярное выражение, которое соответствует только этим трем вещам: ^(1|2|25)$
- и затем в вашем коде вы должны проверить, соответствует ли это регулярное выражение \d+
и не соответствует этому другому один, например:
'if($myStr =~ m/\d+/ && !($myStr =~ m/^(1|2|25)$/))'
atoi()
или аналогичный и сравнить фактические числа, или даже просто сравнить строки напрямую.