Шаблон регулярного выражения, соответствующий буквенной комбинации слова - PullRequest
0 голосов
/ 11 января 2019

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

Для примера я использовал ([D|E|C|K]){4} для соответствия DECK , потому что игрок должен иметь возможность выбирать слово не в точном порядке D-> E-> C-> K . Игрок может выбрать его KDEC или EDCK или KCED или любой ордер.

Я добился этого с помощью ([D|E|C|K]){4}.

Но здесь я сталкиваюсь с проблемой: этот шаблон соответствует EEEE или DDDD или DKDK и т. Д. Просто любая комбинация из 4 символов из набора.

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

Заранее спасибо.

enter image description here

1 Ответ

0 голосов
/ 11 января 2019

Вам нужно сопоставить и захватить каждую букву из диапазона в отдельную группу захвата и добавить отрицательный прогноз перед каждой последующей группой захвата, чтобы избежать совпадения с буквой, соответствующей ей.

регулярное выражение будет выглядеть как

^([DECK])(?!\1)([DECK])(?!\1|\2)([DECK])(?!\1|\2|\3)([DECK])$

См. Демоверсию regex

Подробнее

  • ^ - начало строки
  • ([DECK]) - Группа 1: буква D, E, C или K
  • (?!\1) - следующий символ не может быть тем, который захвачен в группу 1
  • ([DECK]) - группа 2: буква D, E, C или K
  • (?!\1|\2)([DECK]) - следующая буква не может быть равна первой и второй
  • (?!\1|\2|\3)([DECK]) - следующая буква не может быть равна первой, второй и третьей
  • $ - конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...