通过java中的regex从emailId中找出域名

Ran*_*jit 2 java regex

假设电子邮件ID是abc@xyz.com,我需要从中提取域名(即xyz).我是正则表达式的新手.通过谷歌搜索,我发现了这个对话可能的解决方案.并试过类似的东西:

 if("abc@xyz.com".matches(".*\\xyz\\b.*")){
     //true
 }
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用.对此有什么解决方案吗?

zx8*_*x81 7

最简单的,你可以使用这个正则表达式:

(?<=@)\S+
Run Code Online (Sandbox Code Playgroud)

演示.

  • (?<=@) 是一个后视,检查先前的是什么 @
  • \S+ 匹配所有不是空格字符的字符

在Java中,您可以这样做(在几种方式中):

Pattern regex = Pattern.compile("(?<=@)\\S+");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
 ResultString = regexMatcher.group();
    } 
Run Code Online (Sandbox Code Playgroud)

笔记

\S+适用于您呈现的字符串,但它是一个可以匹配各种字符的"粗略工具".如果你想要更具体的东西,你可以用以下代替\S+:

(?i)\b([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\b
Run Code Online (Sandbox Code Playgroud)

这是来自RegexBuddy库的域名表达式.有数千种方法可以匹配域名.在你的情况下,如果你确定你收到了一个电子邮件地址,我给你的正则表达式应该可以正常工作.

参考