Регулярное выражение нескольких групп в любом порядке, каждый из нескольких - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь сопоставить строки, где

  1. должны быть оба front/ и back/ игнорировать регистр, сопровождаемый хотя бы одним непробельным символом
  2. эти дваможет быть в любом порядке
  3. должен начинаться с любой группы

Допустимы следующие значения:

front/asd dsa back/qwe ewq

back/dsafront/asd

Но не следующее:

asd front/asd back/qwe

front/asd back/asd front/asd

Я пробовал следующее в Java:

^(?=(((?i)front/)|((?i)back/)))(?=.*front/\s*\S)(?=.*back/\s*\S)

Но он не перестает работать, если существует более одного front/ или back/.

1 Ответ

2 голосов
/ 01 ноября 2019

Регулярное выражение ^(front/.*back/.*|back/.*front/.*)$ соответствует:

  • front/, затем чему угодно, затем back/, затем чему угодно;или
  • back/, затем что-нибудь, затем front/, затем что угодно.

^ и $ означают, что регулярное выражение должно соответствовать всей строке, а не толькочасть этого. При необходимости вы можете добавить группы захвата, используя скобки, например, если вам нужно «что-нибудь», это может выглядеть так:

^(front/(.*)back/(.*)|back/(.*)front/(.*))$

Группа 1 всегда будет соответствовать всей строке;деталь после front/ будет либо в группе 2, либо в группе 5, а деталь после back/ будет в группе 3 или группе 4.

...