繁体   English   中英

如何在Java中使用正则表达式删除“ abcd.efgh@xyz.com”类型电子邮件地址的点(。)字符?

[英]How to remove dot (.) character using a regex for email addresses of type “abcd.efgh@xyz.com” in java?

我试图编写一个正则表达式来检测Java中“ abc@xyz.com”类型的电子邮件地址。 我想出了一个简单的模式。

String line = // my line containing email address
Pattern myPattern = Pattern.compile("()(\\w+)( *)@( *)(\\w+)\\.com");
Matcher myMatcher = myPattern.matcher(line);

但是,这也会检测到“ abcd.efgh@xyz.com”类型的电子邮件地址。 我浏览了http://www.regular-expressions.info/,并在此网站上链接了

如何仅匹配不包含点的字符串(使用正则表达式)

Java RegEx元字符(。)和普通点?

因此,我将模式更改为以下模式以避免检测到“ efgh@xyz.com”

Pattern myPattern = Pattern.compile("([^\\.])(\\w+)( *)@( *)(\\w+)\\.com");
Matcher myMatcher = myPattern.matcher(line);
String mailid = myMatcher.group(2) + "@" + myMatcher.group(5) + ".com";

如果字符串“行”包含地址“ abcd.efgh@xyz.com”,则我的字符串邮件ID将以“ fgh@yyz.com”返回。 为什么会这样? 如何编写正则表达式以仅检测“ abc@xyz.com”而不检测“ abcd.efgh@xyz.com”?

另外,我如何编写单个正则表达式来从字符串中检测电子邮件地址,例如“ abc@xyz.com”和“ xyz.com的efg”以及“ abc(at)xyz(dot)com”。 基本上,我将如何在正则表达式中实现OR逻辑以执行诸如在OR(at)处检查@ OR的操作?

在下面的一些评论之后,我尝试使用以下表达式在@平方之前得到该部分。

Pattern.compile("((([\\w]+\\.)+[\\w]+)|([\\w]+))@(\\w+)\\.com")
Matcher myMatcher = myPattern.matcher(line);

myMatcher.groups是什么? 嵌套方括号时如何考虑这些组?

System.out.println(myMatcher.group(1));
System.out.println(myMatcher.group(2));
System.out.println(myMatcher.group(3));
System.out.println(myMatcher.group(4));
System.out.println(myMatcher.group(5));

输出就像

abcd.efgh
abcd.efgh
abcd.
null
xyz

对于abcd.efgh@xyz.com

abc
null
null
abc
xyz

对于abc@xyz.com

谢谢。

您可以使用| 正则表达式中的运算符以检测@ORAT:@ | OR |(at)。
您可以通过在模式开头使用^来避免电子邮件地址中包含点号:
尝试这个:


    Pattern myPattern = Pattern.compile("^(\\w+)\\s*(@|at|\\(at\\))\\s*(\\w+)\\.(\\w+)");
    Matcher myMatcher = myPattern.matcher(line);
    if (myMatcher.matches())
    {
        String mail = myMatcher.group(1) + "@" + myMatcher.group(3) + "." +myMatcher.group(4);
        System.out.println(mail);
    }

您的第一个模式需要结合您想要单词字符而不是点的事实,您目前单独拥有它,它应该是:

[^\\.\W]+

这是“非圆点”和“非文字字符”

所以你有了:

Pattern myPattern = Pattern.compile("([^\\.\W]+)( *)@( *)(\\w+)\\.com");

要回答第二个问题,可以在REGEX中使用| 字符

(@|at)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM