在正则表达式中使用OR进行分组

时间:2013-11-16 15:20:06

标签: java regex

以下是我的正则表达式模式。我用它来验证电子邮件地址。

^[\\w]+(\\.|\\_)?[\\w]+\\@{1}[\\w]+\\.{1}(([A-Za-z]+)|(\\.{1}[A-Za-z]+))$

电子邮件ID必须遵循以下规则 1.在1个句点或下划线之前包含任意数量的字母或数字 2.在1 @之前跟随任意数量的字母或数字 3.在1个时期之前跟随任意数量的字母或数字 4.(后跟任意数量的字母)或(1个句点和任意数量的字母)。

我正面临第四条规则的问题。它适用于以@ xyz.abc结尾的电子邮件ID,但对@ xyz.abc.ab

失败

是不是可以像我一样对第四条规则进行分组?

解决方案:

"^[A-Za-z0-9]+[\\._][A-Za-z0-9]+@[A-Za-z0-9]+(?:\\.[A-Za-z]+){1,2}$"

2 个答案:

答案 0 :(得分:2)

根据您的描述,您想要的实际上是:

^[A-Za-z0-9]+[\\._][A-Za-z0-9]+@[A-Za-z0-9]+(?:\\.[A-Za-z]+)+$

分裂出来,你有:

  1. 字母或数字([A-Za-z0-9]+
  2. 下划线或句点([\\._]
  3. 字母或数字([A-Za-z0-9]+
  4. 在签名(@
  5. 字母或数字([A-Za-z0-9]+
  6. 一个或多个句点加alphas((?:\\.[A-Za-z]+)+
  7. 请注意,\\w包含_,因此您无法在此处使用它。

答案 1 :(得分:1)

使用此:

^[\\w]+(\\.|\\_)?[\\w]+\\@{1}[\\w]+(\\.{1}[\\w]+)+$

我还应该指出,电子邮件的实际正则表达式非常复杂。我希望你不要在网站上进行任何真正的检查。