假设电子邮件ID为abc@xyz.com,我需要从中提取域名(即xyz)。
我是正则表达式的新手。通过一点点谷歌搜索,我从this conversation中找到了可能的解决方案。并尝试了类似的方法:

 if("abc@xyz.com".matches(".*\\xyz\\b.*")){
     //true
 }


但这对我没有用。有什么解决办法吗?

最佳答案

最简单的,您可以使用此正则表达式:

(?<=@)\S+


请参见demo


(?<=@)是一个后向检查,用于检查@之前的内容
\S+匹配所有非空格字符的字符


在Java中,您可以执行此操作(有几种方法可以这样做):

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


笔记

\S+适用于您显示的字符串,但是它是可以匹配所有字符的“粗略工具”。如果您想要更具体的内容,可以用以下内容替换\S+

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


这是来自RegexBuddy库的域名表达式。匹配域名的方法有数千种。就您而言,如果您确定要获取电子邮件地址,那么我给您的正则表达式应该可以正常工作。

参考


Lookahead and Lookbehind Zero-Length Assertions
Mastering Lookahead and Lookbehind

关于java - 通过Java中的正则表达式从emailId找出域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24404997/

10-14 11:35
查看更多