Я пытался написать регулярное выражение для обнаружения адресов электронной почты типа «[email protected]» в java. Я придумал простую схему.
String line = // my line containing email address
Pattern myPattern = Pattern.compile("()(\\w+)( *)@( *)(\\w+)\\.com");
Matcher myMatcher = myPattern.matcher(line);
Однако это также обнаружит адреса электронной почты типа «[email protected]». Я просмотрел http://www.regular-expressions.info/ и ссылки на этом сайте, такие как
Как сопоставлять только строки, не содержащие точки (с использованием регулярных выражений)
метасимвол Java RegEx (.) и обычная точка?
Поэтому я изменил свой шаблон на следующий, чтобы избежать обнаружения «[email protected]».
Pattern myPattern = Pattern.compile("([^\\.])(\\w+)( *)@( *)(\\w+)\\.com");
Matcher myMatcher = myPattern.matcher(line);
String mailid = myMatcher.group(2) + "@" + myMatcher.group(5) + ".com";
Если String 'line' содержит адрес '[email protected]', мой String mailid вернется с '[email protected]'. Почему это происходит? Как написать регулярное выражение для обнаружения только «[email protected]», а не «[email protected]»?
Кроме того, как написать одно регулярное выражение для обнаружения адресов электронной почты, таких как «[email protected]» и «efg at xyz.com» и «abc (at) xyz (точка) com» из строк. В принципе, как бы я реализовал логику ИЛИ в регулярном выражении для выполнения чего-то вроде проверки @ ИЛИ в ИЛИ (в)?
После некоторых комментариев ниже я попробовал следующее выражение, чтобы получить часть до квадрата @.
Pattern.compile("((([\\w]+\\.)+[\\w]+)|([\\w]+))@(\\w+)\\.com")
Matcher myMatcher = myPattern.matcher(line);
что будет myMatcher.groups? как рассматриваются эти группы, когда у нас есть вложенные скобки?
System.out.println(myMatcher.group(1));
System.out.println(myMatcher.group(2));
System.out.println(myMatcher.group(3));
System.out.println(myMatcher.group(4));
System.out.println(myMatcher.group(5));
вывод был такой
abcd.efgh
abcd.efgh
abcd.
null
xyz
abc
null
null
abc
xyz
Спасибо.
@
? Это недействительно в адресах электронной почты. - person Jim Garrison   schedule 27.03.2012