Java regex - условие между двумя полными регулярными выражениями

Мне нравится создавать в Java регулярное выражение (regex), которое должно быть истинным, если приходит кроме одного или нескольких нулей или приходит отличный от 3037.

Я подготовил 2 разных регулярных выражения для этих 2 условий

  • Для состояния 0: [^0]+
  • Для состояния 3037: ^((?!^3037$).)*$

но не знаю как поставить между ними OR.

Пропустить случай:

001
002
30377
23037
2
4
55

Состояние отказа:

0
00
000
0000
00000
3037

Можете ли вы добавить в свой вопрос какие-нибудь верные и неверные примеры.

anubhava 01.05.2018 15:44

Я просто ищу регулярное выражение для условия НЕ 0 (или более 0) ИЛИ НЕ 3037.

Prakhar Agrawal 01.05.2018 15:46

У меня есть одна таблица конфигурации, в которой я должен указать ответ об ошибке в виде регулярного выражения java .. поэтому, если приходит отличный от 0 или 3037, это должно быть ошибкой ..

Prakhar Agrawal 01.05.2018 15:48

Вы можете использовать: ^(?!3037$)[^0]*$

anubhava 01.05.2018 15:55

спасибо за ответ, но здесь он не работает 3037 - это целая строка, это условие не дает совпадения, найденного на 003 и 23037, но оно должно давать совпадение, так как оно находится в условии

Prakhar Agrawal 01.05.2018 16:03

Я уже просил вас размещать действительные и недействительные примеры в вашем вопросе, который вы еще не сделали, поскольку это причина, по которой люди голосуют за закрытие этого вопроса.

anubhava 01.05.2018 16:05

кстати, вы писали, что проверка должна завершиться неудачей, если на входе есть какой-либо ноль, поэтому в этом случае 23037 или 003 не сработают, потому что оба содержат ноль.

anubhava 01.05.2018 16:09

Извините за меньшую ясность .. Пройдите регистр: 001, 002, 30377, 23037, 2, 4, 55, ..... Неудачное условие: 0, 00, 000, 0000, 00000, 3027, поэтому только в этом случае не выполняется.

Prakhar Agrawal 01.05.2018 16:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать это комбинированное регулярное выражение для двух условий (и оно не использует чередование):

^(?!(?:3037|0+)$)\d*$

Демо RegEx

Детали RegEx:

  • ^: Начало ввода
  • (?!(?:3037|0+)$): отрицательный просмотр вперед для подтверждения ввода не 3037 и не всех нулей
  • \d*: совпадение любой цифры 0 или более раз
  • $: Конец ввода

спасибо за ответ, но здесь он не работает 3037 - это целая строка, это условие не дает совпадения, найденного на 003 и 23037, но оно должно давать совпадение, так как оно находится в условии

Prakhar Agrawal 01.05.2018 16:09

мое текущее состояние [^ 0] +: все, кроме нуля, плохо, но хочу добавить к нему 3037, то есть все, кроме нуля или 3037, должно быть плохим,

Prakhar Agrawal 01.05.2018 16:10

Извините за меньшую ясность .. Пройдите регистр: 001, 002, 30377, 23037, 2, 4, 55, ..... Неудачное условие: 0, 00, 000, 0000, 00000, 3027, поэтому только в этом случае не выполняется.

Prakhar Agrawal 01.05.2018 16:16

Это очень срочно, сэр, не могли бы вы помочь

Prakhar Agrawal 01.05.2018 16:22

опечатка ошибка это 3037 .. извините еще раз ..

Prakhar Agrawal 01.05.2018 16:24

Спасибо, сэр, все работает нормально ..

Prakhar Agrawal 01.05.2018 16:30

Другие вопросы по теме