Мне нужно регулярное выражение, которое будет извлекать адреса электронной почты из строки (используя регулярные выражения Java).
Это действительно работает.
Мне нужно регулярное выражение, которое будет извлекать адреса электронной почты из строки (используя регулярные выражения Java).
Это действительно работает.
Вот регулярное выражение, которое действительно работает. Я провел час в Интернете и тестировал разные подходы, и большинство из них не сработало, хотя Google поставил эти страницы на первое место.
Хочу поделиться с вами работающим регулярным выражением:
[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})
Вот исходная ссылка: http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/
Мне пришлось добавить несколько тире, чтобы учесть их. Итак, окончательный результат на яванском языке:
final String MAIL_REGEX = "([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})";
Установите этот подключаемый модуль тестера регулярных выражений в eclipse, и у вас будет уйма времени на тестирование регулярных выражений
http://brosinski.com/regex/.
На заметку:
В плагине используйте только одну обратную косую черту для экранирования символа. Но когда вы транскрибируете регулярное выражение в строку Java/C#, вам придется удвоить их, поскольку вы будете выполнять два escape-последовательности, сначала экранируя обратную косую черту из строкового механизма Java/C#, а затем второй для фактического механизма escape-символа регулярного выражения.
Окружите разделы регулярного выражения, текст которого вы хотите захватить, круглыми скобками/многоточием. Затем вы можете использовать групповые функции в регулярном выражении Java или C#, чтобы узнать значения этих разделов.
([_A-Za-z0-9-]+)(\.[_A-Za-z0-9-]+)@([A-Za-z0-9]+)(\.[A-Za-z0-9]+)
Например, используя приведенное выше регулярное выражение, следующая строка
[email protected]
урожаи
start=0, end=16
Group(0) = [email protected]
Group(1) = abc
Group(2) = .efg
Group(3) = asdf
Group(4) = .cde
Группа 0 — это всегда захват всей совпавшей строки.
Если вы не заключите какой-либо раздел с многоточием, вы сможете только обнаружить совпадение, но не сможете захватить текст.
Создание нескольких регулярных выражений может быть менее запутанным, чем одно длинное универсальное регулярное выражение, поскольку вы можете программно протестировать одно за другим, а затем решить, какие регулярные выражения следует объединить. Особенно, когда вы найдете новый шаблон электронной почты, который вы никогда не рассматривали раньше.
немного поздно, но ладно.
Вот что я использую. Просто вставьте его в консоль FireBug и запустите. Найдите на веб-странице «текстовое поле» (скорее всего, внизу страницы), которое будет содержать отдельный список всех адресов электронной почты, найденных в тегах A.
var jquery = document.createElement('script');
jquery.setAttribute('src', 'http://code.jquery.com/jquery-1.10.1.min.js');
document.body.appendChild(jquery);
var list = document.createElement('textarea');
list.setAttribute('emaillist');
document.body.appendChild(list);
var lijst = "";
$("#emaillist").val("");
$("a").each(function(idx,el){
var mail = $(el).filter('[href*="@"]').attr("href");
if(mail){
lijst += mail.replace("mailto:", "")+",";
}
});
$("#emaillist").val(lijst);
Встроенный в Java шаблон адреса электронной почты (Patterns.EMAIL_ADDRESS
) отлично работает:
public static List<String> getEmails(@NonNull String input) {
List<String> emails = new ArrayList<>();
Matcher matcher = Patterns.EMAIL_ADDRESS.matcher(input);
while (matcher.find()) {
int matchStart = matcher.start(0);
int matchEnd = matcher.end(0);
emails.add(input.substring(matchStart, matchEnd));
}
return emails;
}