Почему это регулярное выражение ничем не соответствует?

1

Я пытаюсь использовать следующее регулярное выражение, чтобы найти все электронные письма в строке 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(), который должен найти подстроки, не так ли? Когда я выполняю поиск, он становится пустым, любые идеи почему?

  • 4
    AZ соответствует только верхнему регистру?
  • 2
    Не имеет прямого отношения к вашей проблеме, но я бы рекомендовал изменить конец вашего регулярного выражения на {2,6} , учитывая более новые и более длинные TLD ( .museum , .berlin и т. Д.).
Показать ещё 2 комментария
Теги:

3 ответа

3

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);
  • 1
    Спасибо! Глупая ошибка>. <
  • 0
    @ user2774147 Бывает с лучшими :)
2

AZ будет соответствовать только верхнему регистру, и есть дополнительный \. Попробуй это...

[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[a-zA-Z]{2,4}
  • 1
    Дополнительный обратный слеш был, несомненно, потому что это Java, и ему пришлось удвоить его, чтобы он работал в строковом литерале. Так что это было, вероятно, правильно.
0

Этот способ поиска писем более не правильный, если у нас есть новые домены. Это регулярное выражение не найдет никакой электронной почты в домене site.berlin. Расширьте 2,4, удалите или найдите

[A-Za-z0-9-+/.]*@[A-Za-z0-9/.-]*\\.*[A-Za-z]$

У меня недостаточно репутации, чтобы прокомментировать сообщение, поскольку самый длинный домен домена.international, поэтому {2,4} не найдет его и не вспомнит о доменах с точкой внутри корневого имени, например.co.uk,.de.com, Домен также должен заканчиваться буквой, он не может быть номером или специальным символом. Адрес электронной почты может содержать разделитель типа + или -

Ещё вопросы

Сообщество Overcoder
Наверх
Меню