java - 为什么我会得到这个正则表达式分组?

标签 java regex

我编写了这个正则表达式来提取电子邮件:

(\w+)\s*(?:@|(at)|(\s*at\s*)|(\(at\)))\s*((\w+)(?:\.|\s*dot\s*)(\w+)*(?:\.|\s*dot\s*)*)+com

我的要求是域名可以有两种形式:domain.com 或 sub.domain.com

运行显示总组数为7

对于:
user@domain.com
组 0,user@domain.com
组 1,用户
第 2 组,空
第 3 组,空
第 4 组,空
第 5 组,域。
第 6 组,域

为什么我会出现这种“聚类”现象?我想要的只是提取用户名和域。

最佳答案

每对括号都会在您的模式中添加一个新组。简单来说,您不需要全部。 我尝试过这个表达:

(\w+[\.\w+]*)\s*(?:@|at|\s*at\s*|\(at\))\s*(\w+(?:\.|\s*dot\s*)\w+*(?:\.|\s*dot\s*)*)+com

正确匹配:

john.smith@sub.domain.com
\1: john.smith
\2: sub.domain

john.smith@domain.com
\1: john.smith
\2: domain

johnsmith@domain.com
\1: johnsmith
\2: domain

关于java - 为什么我会得到这个正则表达式分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779645/

相关文章:

JavaScript String.replace : how to know that callback function is invoked for last time?

java - Hibernate事务超时事件

java - long 和 double 值的原子读写

java - 如何直接将 Double 转换为 int?

javascript - 在 jquery 的正则表达式中使用变量

regex - 从字符串和文本数据中提取年份

regex - 正则表达式如何在幕后工作(在 CPU 级别)?

java - 检测 JavaFX WebView 中的 URL 更改

java - 调用 EntityManager.flush() 时它是否也会刷新第二个缓存?

Python 使用正则表达式拆分字符串