2015-04-22 2 views
1

Я хочу, чтобы проверить с помощью Java регулярное выражение в следующих случаях:Логическое ИЛИ в регулярных выражениях

  • AB -> разрешено
  • AC -> разрешено
  • ABC -> разрешено
  • А -> запрещено

Здесь а, в и С, регулярное выражение:

  • A: (([0-9]{1,3})(\.[0-9]{1,3})?)
  • B: (\+([0-1](\.[0-9]{1,3}))
  • C: (-([0-1](\.[0-9]{1,3}))

Так как я могу создать регулярное выражение, используя логическое ИЛИ?

Решение

^(([0-9]{1,3})(\.[0-9]{1,3})?)([-+]([0-1](\.[0-9]{1,3}))|(\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3})))))$ 

ответ

1

Вы можете комбинировать B и C регулярных выражений с проставлением + и - в классе символов и использовать следующее регулярное выражение:

^(([0-9]{1,3})(\.[0-9]{1,3})?)([-+]([0-1](\.[0-9]{1,3}))|(\+([0-1](\.[0-9]{1,3}‌​))(\-([0-1](\.[0-9]{1,3})))))$ 

В этом случае всегда у вас будет A и после него есть B или C или BC

Объясните:

Ваше регулярное выражение будет быть AB или AC или ABC поэтому после A вы хотите B или C или BC вы можете создать B или C с проставлением + и - в классе символов:

([-+]([0-1](\.[0-9]{1,3})) 

И затем использовать пип (|) в качестве логического или между предыдущим вариантом и BC, который является следующим:

(\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3})) 
+0

порядок важен, когда строка используется как + является первым - это второй – Athanor

+0

@Athanor Итак, что случилось с моим ответом? – Kasramvd

+1

Ничего, моя ошибка – Athanor

1

несколько решений:

  1. Запишите это, как вы говорите: AB|AC|ABC

  2. Избегайте избыточности: A(BC?|C) или A(B?C|B)

0

Используйте три шаблона, разделенных оператором |. Чтобы соответствовать AB или AC, просто введите B или C внутри группы, не содержащей захвата, оба шаблона разделены оператором чередования.

(([0-9]{1,3})(\.[0-9]{1,3})?)(\+([0-1](\.[0-9]{1,3}))(-([0-1](\.[0-9]{1,3}))|(([0-9]{1,3})(\.[0-9]{1,3})?)(?:(\+([0-1](\.[0-9]{1,3}))|(-([0-1](\.[0-9]{1,3}))) 
|<-----------------------------------ABC----------------------------------->|<------------AB or AC-----------------------------------------------------------> 
Смежные вопросы