У меня есть строка с одним или несколькими адресами электронной почты, я хочу использовать регулярное выражение, чтобы найти первый адрес электронной почты, который не является указанным адресом электронной почты. Например, если моя строка содержит один или несколько адресов электронной почты общей формы [email protected], но также может содержать одно или несколько вхождений определенного адреса электронной почты, точно равного определенному лицу@anotherdomain.com, как я могу найти первый адрес электронной почты соответствует первой форме и не является второй формой? Или, другими словами, мне нужен первый адрес электронной почты, отличный от конкретного лица@anotherdomain.com. Все адреса электронной почты могут быть в любом порядке.
Regex соответствует первому адресу электронной почты, который не является указанным адресом электронной почты
Ответы (1)
Регулярное выражение для соответствия любому адресу электронной почты: \w+@\w+\.\w{3}
.
Затем (после того, как это регулярное выражение только что совпало), вы можете использовать отрицательный просмотр назад, чтобы исключить «запрещенный» адрес, например. (?<!particularperson@anotherdomain\.com)
.
Таким образом, все регулярное выражение может быть:
\w+@\w+\.\w{3}(?<!particularperson@anotherdomain\.com)
Конечно, неизвестно, поддерживает ли ваш вариант регулярного выражения отрицательный просмотр назад (например, JavaScript не поддерживает), но вы не указали это.
Примечание. Вы не можете использовать отрицательный просмотр для запрещенного адреса, а затем регулярное выражение для соответствия любому адресу. Причина в том, что после совпадения отрицательного предпросмотра (находит запрещенный адрес) обработчик регулярных выражений перемещается на один символ вперед и, начиная следующую попытку с этого места, этот предпросмотр не совпадет. Таким образом, регулярное выражение, соответствующее любому адресу, будет соответствовать запрещенному адресу без первого символа.
Редактировать
Если у вас есть переменная последняя часть (.co
, .com
и другие), попробуйте немного другой подход.
Вы не можете написать, например. .com?
в ретроспективном просмотре, потому что он не допускает переменной длины шаблона.
Вместо этого вы можете поместить отрицательный просмотр назад перед последней частью (что бы это ни было) и проверять только particularperson
и anotherdomain
(плюс @
и .
в нужных местах).
Еще два дополнения:
- После того, что вы уже поняли, не может быть ни точки, ни слова char, поэтому последняя часть должна быть
(?!\.\w)
. - Точно так же все регулярное выражение должно начинаться с
\b
, чтобы начинаться со слова boudary.
Таким образом, исправленное регулярное выражение может быть:
\b\w+@\w+\.(?<!particularperson@anotherdomain\.)\w{2,3}(?!\.\w)