Я пытаюсь использовать следующее регулярное выражение, чтобы найти все электронные письма в строке html:
RegExp
[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}
HTML
<a href="mailto:[email protected]">[email protected]</a></span>. </p>
Я использую matcher.find(), который должен найти подстроки, не так ли? Когда я выполняю поиск, он становится пустым, любые идеи почему?
Regex чувствителен к регистру по умолчанию, поэтому, например, последняя часть .net
не может быть сопоставлена с .[AZ]{2,4}
.
Чтобы сделать ваш регистр нечувствительным к регистру, добавьте флаг (?i)
"(?i)[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}"
или скомпилировать его с флагом Pattern.CASE_INSENSITIVE
.
Pattern.compile("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}",Pattern.CASE_INSENSITIVE);
AZ
будет соответствовать только верхнему регистру, и есть дополнительный \
. Попробуй это...
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[a-zA-Z]{2,4}
Этот способ поиска писем более не правильный, если у нас есть новые домены. Это регулярное выражение не найдет никакой электронной почты в домене site.berlin. Расширьте 2,4, удалите или найдите
[A-Za-z0-9-+/.]*@[A-Za-z0-9/.-]*\\.*[A-Za-z]$
У меня недостаточно репутации, чтобы прокомментировать сообщение, поскольку самый длинный домен домена.international, поэтому {2,4} не найдет его и не вспомнит о доменах с точкой внутри корневого имени, например.co.uk,.de.com, Домен также должен заканчиваться буквой, он не может быть номером или специальным символом. Адрес электронной почты может содержать разделитель типа + или -
{2,6}
, учитывая более новые и более длинные TLD (.museum
,.berlin
и т. Д.).