Я хотел бы регулярное выражение, которое извлечет адреса электронной почты из Строки (использующий регулярные выражения 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/
Установите этот плагин regex tester в eclipse, и у вас будет масса времени для тестирования regex
http://brosinski.com/regex/.
Обратите внимание:
В плагине для экранирования символов используется только один обратный слеш. Но когда вы переписываете regex в строку Java/C#, вам придется удвоить их, поскольку вы будете выполнять два экранирования, первое экранирование обратного слеша из механизма строк Java/C#, а второе для фактического механизма экранирования символов regex.
Окружите части regex, текст которых вы хотите захватить, круглыми скобками/эллипсами. Затем вы можете использовать групповые функции в Java или C# regex, чтобы узнать значения этих секций.
([_A-Za-z0-9-]+)(\.[_A-Za-z0-9-]+)@([A-Za-z0-9]+)(\.[A-Za-z0-9]+)
Например, используя приведенный выше regex, следующая строка
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 - это всегда захват всей совпавшей строки.
Если вы не заключите ни один раздел в многоточие, вы сможете только обнаружить совпадение, но не сможете захватить текст.
Создание нескольких regex может быть менее запутанным, чем создание одного длинного универсального regex, поскольку вы можете программно тестировать один за другим, а затем решить, какие regex должны быть объединены. Особенно когда вы обнаружите новый шаблон электронной почты, о котором раньше не задумывались.