RegEx для сопоставления двух букв со специальными границами - PullRequest
1 голос
/ 06 мая 2019

Я хочу убедиться, что пользовательский ввод имеет:

  • Две буквы в начале
  • И поддержку любого количества дополнительных пробелов после этих двух букв.
  • Кроме того, если указан хотя бы один пробел, необязательно разрешите после него буквы, цифры или . символов.

Вот выражение, которое у меня есть на данный момент:

[a-zA-Z][a-zA-Z] (?\\s+ (?a-zA-Z0-9.))

И вот мое мышление:

[a-zA-Z][a-zA-Z] гарантирует, что ввод начинается как минимум с двух букв

(?\\s+ и начинается необязательным оператором.Этот необязательный оператор должен начинаться хотя бы с одного пробела (я на окнах, поэтому у меня есть две косые черты).

(?a-zA-Z0-9.)) заканчивает необязательный оператор.Итак, если указан хотя бы один пробел, хотя бы один необязательный символ, число или.также могут быть добавлены.

Например, ab, ab , ab .s и ab .asd2 должны быть допустимыми входными данными.

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Проблема с вашей попыткой состоит в том, что и (?\, и (?a являются синтаксическими ошибками.Если вы хотите создать необязательную группу, вам нужно написать (...)?, а не (?...).

(Другая проблема заключается в том, что a-zA-Z0-9 в вашем регулярном выражении соответствует буквально, поскольку оно не является частью класса символов.)

Кроме того, \s (для сопоставления пробелов) не существует в регулярном выражении POSIX.

Мое предложение:

^[a-zA-Z]{2}( +[a-zA-Z0-9.]*)?$

То есть:

^                # beginning of string
[a-zA-Z]{2}      # exactly two letters
(
  \ +            # one or more spaces
  [a-zA-Z0-9.]*  # zero or more of: letters, digits, or dot
)?               # ... this group is optional
$                # end of string
0 голосов
/ 06 мая 2019

Я думаю, что выражение как [a-zA-Z]{2}?\s+?[a-zA-Z0-9.]*

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