комбинировать регулярное выражение с частичным использованием | не работает c ++ - PullRequest
0 голосов
/ 19 июня 2020

, так что это будет регулярное выражение для адреса электронной почты. имя пользователя: заглавные и строчные буквы, цифры, подчеркивание и точка

^[A-Za-z0-9._]+

тогда есть @ и домен: заглавные и строчные буквы и цифры

@[A-Za-z0-9]+

затем есть точка и tld: at минимум 2 символа (буквы и цифры) и максимум одна точка. Я использовал | чтобы иметь как минимум 2 символа и максимум одну точку:

([A-Za-z0-9]{2,}|[.]{0,1})

, поэтому полное регулярное выражение будет следующим:

regex reg ("^[A-Za-z0-9._]+@[A-Za-z0-9]+\\.([A-Za-z0-9]{2,}|[.]{0,1})$");

, но правило максимальной одной точки не работает. когда я ввожу zohal@gmail.df.g (не реально, конечно), он дает false. он работает и в других случаях, например, zohal@gmail.com.

1 Ответ

1 голос
/ 19 июня 2020

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

regex reg(R"(^[A-Za-z0-9._]+@[A-Za-z0-9]+(?:\.[A-Za-z0-9]+)+$)")

См. демонстрацию регулярных выражений

Подробности

  • ^ - начало строки
  • [A-Za-z0-9._]+ - 1 или более букв, цифр, . или _
  • @ - a @ char
  • [A-Za-z0-9]+ - 1 или более букв или цифр
  • (?:\.[A-Za-z0-9]+)+ - 1 или более вхождений точки, а затем 1 или более букв или цифр
  • $ - конец позиции строки.

Поскольку после @ есть два количественных шаблона +, вам не требуется явный (?=(?:[^A-Za-z0-9]*[A-Za-z0-9]){2}) упреждающий просмотр, чтобы требовать хотя бы две буквы или цифры.

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