давайте по частям ... сначала как получить действительный элемент домена.Он состоит из буквенно-цифровых строк, которые могут содержать дефис между двумя символами, но не на концах и не повторяться.Это можно сделать с помощью этого регулярного выражения:
[a-zA-Z0-9](-?[a-zA-Z0-9])*
Вы видите, поскольку дефис необязателен, буквенно-цифровые строки без дефиса допускаются любой длины, они не могут быть на любом конце и дефис не может быть повторен (дефис всегда окружен буквенно-цифровым символом. Это сформирует компонент домена, чтобы один или несколько компонентов домена были разделены точками ... мы используем тот же подход и пишем:
<EXP>(\.<EXP>)*
, где <EXP>
-приведенное выше регулярное выражение.
[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*
это будет соответствовать доменной части адреса электронной почты. Чтобы сформировать остальное, мы разрешаем любой символ (кроме @
,
и ,
), поскольку они используютсядля разделения компонентов:
[^@,\s]+
, поэтому наше регулярное выражение приводит к:
[^@,\s]+@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*
, а затем мы разрешаем любое их повторение, разделенное \s*,\s*
(запятая, окруженная любым числомпробелы):
<EXP>(\s*,\s*<EXP>)*
где <EXP>
- это выражение выше:
[^@,\s]+@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*(\s*,\s*[^@,\s]+@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*)*
будет выражением, которое будет анализировать все, как вы захотите. См. demo для демонстрации того, как это работает.
Это кажется сложным, но вы должны написать это только один раз.
Ожидайте, что это поможет.