2016-06-30 5 views
0

Я пытаюсь написать регулярное выражение для Java для сопоставления следующих примеров строк:Regex для сопоставления последовательности следует одной из двух других последовательностей

my_phrases=[phrase1, phrase2] 
my_phrases=[phrase2, phrase1] 

Таким образом, последовательность my_phrases= следует последовательности phrase1 и phrase2 в любом порядке должны быть сопоставлены. Что я сделал:

^my_phrases.?(phrase1,phrase2|phrase2,phrase1)$ 

Это не работает. Не могли бы вы помочь?

+0

Вы можете группировать их следующим образом: '^ my_phrases.? ((Фраза, фраза2) | (фраза, фраза1)) $' –

+1

'.?' Не может соответствовать '= [' и ',' будет не совпадают ', [пробел]' –

+0

@MariaDeleva этот не работает. –

ответ

1

Ваше регулярное выражение не работает, потому что не приходится на [ и ] и пространства после ,. Вы можете попробовать регулярное выражение, как это:

^my_phrases.*(phrase1,\s*phrase2|phrase2,\s*phrase1).*$ 

Но, конечно же, «идеальный» регулярное выражение зависит от того, что именно вы хотите, чтобы соответствовать, например, независимо от того, являются ли эти [ и ] и т. д., фактически являются необязательными или обязательными.

1

Нечто подобное возможно ...

^my_phrases=\[((phrase1, phrase2)|(phrase2, phrase1))\]$ 
+1

'^ my_phrases = \ [((фраза1, фраза2) | (фраза2, фраза1)) \] $' Вам нужен другой набор '()' вокруг '' 'или он включает' [] ' – TemporalWolf

+0

Я сделал редактирование. Спасибо @TemporalWolf – T33C

+0

Вы были быстрее на ничью, и это почти идентично тому, что я собирался опубликовать. Это не самый надежный способ сделать это, но подходит для проблемы, как написано. – TemporalWolf

1

Это что-то общее:

/^(my_phrases=\[([^,]+),\s([^,]+)\])$/gm 

MATCH 1

  1. [0-29] my_phrases=[phrase1, phrase2]
  2. [12-19] phrase1
  3. [21-28] phrase2

MATCH 2

  1. [30-59] my_phrases=[phrase2, phrase1]
  2. [42-49] phrase2
  3. [51-58] phrase1

И это немного специфический:

/^(my_phrases=\[(phrase1|phrase2),\s(phrase1|phrase2)\])$/gm 

МАТЧ 1

  1. [0-29] my_phrases=[phrase1, phrase2]
  2. [12-19] phrase1
  3. [21-28] phrase2

СПИЧКА 2

  1. [30-59] my_phrases=[phrase2, phrase1]
  2. [42-49] phrase2
  3. [51-58] phrase1
Смежные вопросы