регулярное выражение для начала и окончания набора символов, но с другим набором символов между - PullRequest
2 голосов
/ 07 марта 2019

Я пытаюсь создать регулярное выражение, которое:

  • должно иметь свой первый символ в наборе символов (FIRST_SET)
  • может дополнительно иметь следующие символыв другом наборе символов (SECOND_SET)
  • , но если в нем 2 или более символов, последний символ должен быть в FIRST_SET
  • не может быть длиннее MAX_CHARSвсего символов

Пример

  • FIRST_SET = ac или, например, (таким образом, d исключается)
  • SECOND_SET = ag
  • MAX_CHARS = 10

Вот что у меня есть:

^[a-c|e-g][a-g]{0,8}[a-c|e-g]{0,1}$

Кажется, это работает, КРОМЕ, если d - этопоследний символ и общее количество символов < MAX_CHARS

Есть ли способ исправить это?

1 Ответ

2 голосов
/ 07 марта 2019

Вы можете использовать

^(?!.{11})(?=.*[a-ce-g]$)[a-ce-g][a-g]{0,9}$

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

Подробности

  • ^ - начало строки
  • (?!.{11}) - разрешено до 10 символов
  • (?=.*[a-ce-g]$) - после 0 или более символов последний должен быть из FIRST SET
  • [a-ce-g] - письмо от FIRST SET
  • [a-g]{0,9} - от нуля до девяти символов в SECOND SET
  • $ - конце строки.

Обратите внимание, что | внутри классов символов соответствуют буквенным символам канала, вам необходимо удалить его из шаблона.

Отрицательный запрос (?!.{11}) выполняется один раз в начале строки и завершается неудачно.соответствует, если в строке есть 11 символов (кроме символа новой строки).Вы также можете использовать (?=.{0,10}$), для этого потребуется от 0 до 10 символов только в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...