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

我试图编写一个正则表达式来检测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/和这个网站上的链接

How to match only strings that do not contain a dot (using regular expressions)

Java RegEx meta character (.) and ordinary dot?

所以我改变了我的模式,以避免检测'efgh@xyz.com'

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

Matcher myMatcher = myPattern.matcher(line);

String mailid = myMatcher.group(2) + "@" + myMatcher.group(5) + ".com";如果字符串'line'包含地址'abcd.efgh@xyz.com',则我的String mailid将返回'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

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值