регулярное выражение извлечения электронной почты Java? - PullRequest
7 голосов
/ 12 февраля 2010

Мне нужно регулярное выражение, которое будет извлекать адреса электронной почты из строки (используя регулярные выражения Java).

Это действительно работает.

Ответы [ 5 ]

15 голосов
/ 12 февраля 2010

Вот регулярное выражение, которое действительно работает. Я провел час в интернете и тестировал разные подходы, и большинство из них не работало, хотя 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/

4 голосов
/ 28 декабря 2011

Мне пришлось добавить несколько штрихов, чтобы учесть их. Итак, окончательный результат на яванском:

final String MAIL_REGEX = "([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})";
3 голосов
/ 12 февраля 2010

Установите этот плагин-тестер для регулярных выражений в Eclipse, и у вас будет время для тестирования регулярных выражений
http://brosinski.com/regex/.

Примечания:
В плагине используйте только одну обратную косую черту для экранирования персонажа. Но когда вы транскрибируете регулярное выражение в строку Java / C #, вам придется удвоить их, как если бы вы выполняли два экранирования, сначала экранируя обратную косую черту из механизма строки Java / C #, а затем - для фактического механизма экранирования символа регулярного выражения. *

Окружите разделы регулярного выражения, текст которых вы хотите записать, круглыми скобками / эллипсами. Затем вы можете использовать групповые функции в Java или C # regex, чтобы узнать значения этих разделов.

([_ A-Za-z0-9 -] +) (\ [_ A-Za-z0-9 -]. +) @ ([A-Za-z0-9] +) (\. [A-Za-z0-9] +)

Например, используя приведенное выше регулярное выражение, следующая строка

abc.efg@asdf.cde

выход

start=0, end=16
Group(0) = abc.efg@asdf.cde
Group(1) = abc
Group(2) = .efg
Group(3) = asdf
Group(4) = .cde

Группе 0 всегда соответствует захват всей совпадающей строки.

Если вы не заключите ни одного раздела в эллипсы, вы сможете обнаружить совпадение, но не сможете зафиксировать текст.

Создание нескольких регулярных выражений может быть менее запутанным, чем одно длинное универсальное регулярное выражение, поскольку вы можете программно проверить одно за другим, а затем решить, какие регулярные выражения следует объединить. Особенно, когда вы найдете новый шаблон электронной почты, который вы никогда раньше не рассматривали.

0 голосов
/ 13 октября 2017

Шаблон адреса электронной почты, встроенный в 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;
    }
0 голосов
/ 03 июля 2013

немного поздно, но хорошо.

Вот что я использую. Просто вставьте его в консоль FireBug и запустите. Найдите на веб-странице текстовое поле (скорее всего внизу страницы), которое будет содержать отдельный список всех адресов электронной почты, обнаруженных в тегах А.

    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);
...