Хорошо, вот оно: Регулярное выражение:
\b[A-Z0-9._%+-]+(@|\[at\]|\(at\))[A-Z0-9.-]+((\.|\[dot\]|\(dot\))[A-Z]{2,})+\b
По сравнению с вашим собственным регулярным выражением, это просто добавляет alternations
(что означает ИЛИ). Я добавляю:
(@|\[at\]|\(at\))
, что будет соответствовать '@
'ИЛИ [at]
' ИЛИ '(at)
'.
Для точки я добавляю:
(\.|\[dot\]|\(dot\))
, который будет соответствовать dot
ИЛИ [dot]
'ИЛИ (dot)
'
Затем я создал группу из:
((\.|\[dot\]|\(dot\))[A-Z]{2,})+
, которая будет соответствовать таким вещам, как: '.com' и '.uk.com' один или несколько раз.
Обновление: Я обновил регулярное выражение для поддержки '.' или «(точка)» или «[точка]» в имени перед «@»:
\b[A-Z0-9._%+-]+((\.|\[dot\]|\(dot\))[A-Z0-9._%+-]+)*(@|\[at\]|\(at\))[A-Z0-9.-]+((\.|\[dot\]|\(dot\))[A-Z]{2,})+\b
Теперь оно соответствует всем примерам вопроса.
Кстати: ошибка, которую вы сделано в вашем недавнем регулярном выражении, чтобы включить все в character group
(между квадратными скобками). Это будет соответствовать каждому character
в группе в любом порядке.
Обновление 2:
Упс, опечатка, обновлено регулярное выражение.