假设电子邮件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/