Я экспериментирую с регулярным выражением и пытаюсь отфильтровать кучу адресов электронной почты, встроенных в какой-либо текстовый источник. Процесс фильтрации будет зависеть от двух конкретных условий:
Каждое письмо начинается с
abc
Обычный шаблон электронной почты, который включает
@
, за которым следует.
и заканчивается конкретно наcom
Источник:
sajgvdaskdsdsds
[email protected]
sdksdhkshdsdk[email protected]
wdgjkasdsdadPattern1 = "abc[\w\W][@][\w]\.com
код:
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
boolean found = false;
String source = "[email protected]@gmail.comwdgjkasdsdad";
String pattern1 = "abc[\\w\\W]*[@][\\w]*\\.com";
Pattern p1 = Pattern.compile(pattern1);
Matcher m1 = p1.matcher(source);
System.out.println("Source:\t" + source);
System.out.println("Exprsn:\t" + m1.pattern());
while (m1.find())
{
found = true;
System.out.println("Pos: " + m1.start() + "\tFound: " + m1.group());
}
System.out.println();
if(!found)
{
System.out.println("Nothing found!");
}
}
}
Я ожидаю o/p как:
Позиция: 15 Найдено: [email protected]
Поз.: 48 Найдено: [email protected]
Но получаю:
Позиция: 15 Найдено: [email protected]@gmail.com
Если я использую этот Pattern2: abc[\\w]*[@][\\w]*\\.com
, то я получаю ожидаемый o/p. Однако дело в том, что адрес электронной почты может содержать символы, отличные от слов, после abc
и до @
. (Например: [email protected]
).
Следовательно, Pattern2 не работает с несловными символами. Итак, я выбрал [\\w\\W]*
вместо [\\w]*
.
Я также пробовал Pattern3: abc[\\w\\W][@][\\w]\\.com[^.]
и все еще не работает.
Пожалуйста, помогите мне, где я делаю неправильно?