Я пытался написать регулярное выражение для определения адресов электронной почты типа 'abc@xyz.com' в Java.Я придумал простой шаблон.
String line = // my line containing email address
Pattern myPattern = Pattern.compile("()(\\w+)( *)@( *)(\\w+)\\.com");
Matcher myMatcher = myPattern.matcher(line);
Однако он также обнаружит адреса электронной почты типа 'abcd.efgh@xyz.com'.Я просмотрел http://www.regular -expressions.info / и ссылки на этом сайте, например
Как сопоставлять только строки, которые не содержат точку (с помощью регулярных выражений)
метасимвол Java RegEx (.) И обычная точка?
Поэтому я изменил свой шаблон на следующий, чтобы избежать обнаружения'efgh@xyz.com'
Pattern myPattern = Pattern.compile("([^\\.])(\\w+)( *)@( *)(\\w+)\\.com");
Matcher myMatcher = myPattern.matcher(line);
String mailid = myMatcher.group(2) + "@" + myMatcher.group(5) + ".com";
Если в строке 'String' содержится адрес 'abcd.efgh@xyz.com', мой почтовый идентификатор String вернется с 'fgh@yyz.com'.Почему это происходит?Как написать регулярное выражение для обнаружения только «abc@xyz.com», а не «abcd.efgh@xyz.com» ?
Кроме того, как написать одно регулярное выражение для обнаружения адресов электронной почты, например «abc @»xyz.com 'и' efg at xyz.com 'и' abc (at) xyz (dot) com 'из строк.В основном, как я мог бы реализовать логику OR в регулярном выражении для выполнения чего-то вроде проверки на @ OR в OR (at)?
После некоторых комментариев ниже я попробовал следующее выражение, чтобы получить часть до @ в квадрате.
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
для abcd.efgh@xyz.com
abc
null
null
abc
xyz
для abc@xyz.com
Спасибо.