RegEx для сопоставления электронной почты также соответствует URL - PullRequest
1 голос
/ 19 марта 2012

Я пытаюсь закодировать RegEx, который будет извлекать электронные письма, которые приходят в разных формах:

user@domain.com, user@sub.domain.com, пользователь в домене точка com, пользователь(at) domain dot com

Вот мой снимок (наивно я знаю):

(\w+)\s*(?:@?|(at)?|(\s*at\s*)?|(\(at\))?)\s*(\w+(?:\.|\s*dot\s*)){1,}com

Это соответствует тому, что я хочу, но также соответствует URL.Как исключить соответствие URL-адресов?

Ответы [ 4 ]

3 голосов
/ 19 марта 2012
0 голосов
/ 19 марта 2012

Ваша проблема в группе без захвата (?:@?|(at)?|(\s*at\s*)?|((at))?).Со всеми ? вы сделали любое совпадение совершенно необязательным.Замените эту часть следующим:

(?:@|at|\(at\))
0 голосов
/ 19 марта 2012

Рассмотрим этот элемент:

(?:@?|(at)?|(\s*at\s*)?|(\(at\))?)

Короткий ответ: у вас слишком много ? с, так что полностью пустая строка будет соответствовать нескольким из них, так что (at), @ или at вообще не требуется.

Поскольку вы уже разделяете ветви с помощью | s, вам не нужны ? s, чтобы пометить отдельную ветвь как ненужную - только одна из них должна соответствовать, но эта должна быть не -Дополнительный.

0 голосов
/ 19 марта 2012

Я думаю, что эта часть

(\w+(?:\.|\s*dot\s*))

отвечает за сопоставление URL.

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