Regex соответствует первому адресу электронной почты, который не указан - PullRequest
0 голосов
/ 22 мая 2018

У меня есть строка с одним или несколькими адресами электронной почты, я хочу использовать регулярное выражение, чтобы найти первый адрес электронной почты, который не является указанным адресом электронной почты.Например, если моя строка содержит один или несколько адресов электронной почты общей формы somebody@somedomain.com, но также может содержать одно или несколько вхождений определенного адреса электронной почты, в точности равных specificperson@anotherdomain.com, как я могу найти первый адрес электронной почтыэто соответствует первой форме, и это не вторая форма?Или, другими словами, мне нужен первый адрес электронной почты, который не является specialperson@anotherdomain.com.Все адреса электронной почты могут быть в любом порядке.

1 Ответ

0 голосов
/ 22 мая 2018

Регулярное выражение для соответствия любому адресу электронной почты: \w+@\w+\.\w{3}.

Затем (после того, как это регулярное выражение только что совпадало), вы можете использовать отрицательный взгляд за дляисключить «запрещенный» адрес, например, (?<!particularperson@anotherdomain\.com).

Таким образом, все регулярные выражения могут быть:

\w+@\w+\.\w{3}(?<!particularperson@anotherdomain\.com)

Конечно, не ясно, поддерживает ли ваш вариант регулярных выражений отрицательные взгляды.(например, JavaScript этого не делает), но вы его не указали.

Примечание. Нельзя использовать отрицательный прогноз для запрещенного адреса, а затем использовать регулярное выражение для сопоставления с любым адресом.Причина в том, что после совпадения с отрицательным прогнозом (находящим запрещенный адрес) процессор регулярных выражений перемещает один символ вперед и, начиная следующую попытку с этого места, этот тупик не будет совпадать.Поэтому регулярное выражение для совпадения с любым адресом будет соответствовать запрещенному адресу без указания только первого символа.

Редактировать

Если у вас есть переменная последняя часть (.co, .com и другие), попробуйтенемного другой подход.

Вы не можете написать, например, .com? в lookbehind, потому что он не допускает переменную длину шаблона.

Вместо этого вы можете поставить отрицательный lookbehind передпоследняя часть (что бы это ни было) и проверьте только на particularperson и anotherdomain (плюс @ и . в нужных местах).

Еще два дополнения:

  • После того, что вы уже сделали, не должно быть ни точки, ни слова char, поэтому последняя часть должна быть (?!\.\w).
  • Аналогично, все регулярное выражение должно начинаться с \b, чтобы начать с слова boudary

Таким образом, исправленное регулярное выражение может быть:

\b\w+@\w+\.(?<!particularperson@anotherdomain\.)\w{2,3}(?!\.\w)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...