Я не знаю ни одной из существующих библиотек, которые делают то, что вам нужно, и, насколько я могу судить, невозможно полностью решить эту проблему с помощью регулярных выражений, однако вы можете немного сузить круг.
В спецификации электронной почты указывается, что электронная почта в формате user1 @ example является допустимым форматом, но на практике она редко встречается в открытом доступе.Если вы согласны с возникновением ошибки (или созданием нового арендатора, который необходимо будет объединить вручную) для этих случаев, вы можете ограничить совпадения всем до tld:
/^.*@(.*)\.[^\.]+$/
Это будет охватыватьтакие случаи, как:
- user1@example.com
- user2@example.org
Я не уверен, сколько существует меток типа"co" в "co.uk" и "co.in", но если это определенный набор, вы можете при желании исключить их с помощью следующего регулярного выражения (предполагая, что "co" и "ab" исключаются):
/^.*@(.+?)\.(co\.|ab\.)?[^\.]+$/
Первая группа захвата будет извлекать «пример» из следующего:
- user1@example.com
- user2@example.org
- user3@example.co.uk
- user4@example.ab.in
После этого вам, вероятно, потребуется перейти на программный подход для оценки таких поддоменов, как
Однако вы быстро столкнетесь с такими вещами, как:
- user4@for.example.com
- user6@for.example.co.uk
- user6@forexample.com
- user5@for.instance.com
Это также становится довольно странным, если учесть, что метка может совпадать в нескольких местах:
- user6@ab.example.com
- user7@ instance.ab.cd