使用特殊电子邮件正则表达式

Mah*_*leh 0 java regex

我在表格中收到了一些电子邮件:

staticN123@sub1.mydomain.com
staticN456@sub2.mydomain.com
staticN789@sub3-sub.mydomain.com
Run Code Online (Sandbox Code Playgroud)

动态是(N或M或F)字符后面的数字,以及@和mydomain.com之间的子域名

我想在字符串中创建一个与此表单匹配的正则表达式,如果匹配,则获取N字符后面的数字.

bw_*_*ezi 6

staticN([0-9]+)@.+\.mydomain\.com
Run Code Online (Sandbox Code Playgroud)

而不是[0-9]+你也可以使用\d+哪个是相同的.在.+@后可以匹配太多.最终你想用它来取代[^\.]+sub.sub域.

更新:

^staticN(\d+)@[a-z0-9_-]+\.mydomain\.com$
Run Code Online (Sandbox Code Playgroud)

添加^$匹配搜索字符串的开头结尾以避免错误匹配例如​​somthingwrong_staticN123@sub.mydomain.com.xyz

你可以在这里测试这个正则表达式链接到rubular

-

应用以下评论中讨论的变更:

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

代码示例回答其中一条评论中的问题:

// 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 );
Run Code Online (Sandbox Code Playgroud)