Использование специального регулярного выражения электронной почты - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть несколько писем в форме:

staticN123@sub1.mydomain.com
staticN456@sub2.mydomain.com
staticN789@sub3-sub.mydomain.com

Динамическим является число после символа (N или M или F) и субдомена между @ и mydomain.com

Я хочу сделать регулярное выражение, соответствующее этой форме в строке, и, если это совпадение, получить число после символа N.

1 Ответ

6 голосов
/ 07 февраля 2011
staticN([0-9]+)@.+\.mydomain\.com

вместо [0-9]+ вы также можете использовать \d+, что тоже самое. .+ после @ может слишком сильно совпадать. в конечном итоге вы захотите заменить это на [^\.]+, чтобы исключить домены sub.sub.

Обновление:

^staticN(\d+)@[a-z0-9_-]+\.mydomain\.com$

добавление ^ и $ для поиска начало и конец строки поиска, чтобы избежать ложного совпадения, например somthingwrong_staticN123@sub.mydomain.com.xyz

Вы можете проверить это регулярное выражение здесь ссылка на Rubular

-

применение изменений, обсуждаемых в комментариях ниже:

^(?:.+<)?static[NMF](\d+)@[a-z0-9_-]+\.mydomain\.com>?$

пример кода для ответа на вопрос в одном из комментариев:

// input
String str = "reply <staticN123@sub1.mydomain.com";
// example 1
String nr0 = str.replaceAll( "^(?:.+<)?static[NMF](\\d+)@[a-z0-9_-]+\\.mydomain\\.com>?$", "$1" );
System.out.println( nr0 );
// example 2 (precompile regex is faster if it's used more than once afterwards)
Pattern p = Pattern.compile( "^(?:.+<)?static[NMF](\\d+)@[a-z0-9_-]+\\.mydomain\\.com>?$" );
Matcher m = p.matcher( str );
boolean b = m.matches();
String nr1 = m.group( 1 );  // m.group only available after m.matches was called
System.out.println( nr1 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...