【问题标题】:Regex to include multiple EmailIds in Java正则表达式在 Java 中包含多个 EmailId
【发布时间】:2016-11-24 17:03:48
【问题描述】:

我需要向客户发送多封电子邮件。

但我在向多个电子邮件 ID 发送电子邮件时遇到问题。

例如,如果我写

s@t.com;r@t.com

它会给我一个错误,说明电子邮件 ID 不正确。

我希望电子邮件 ID 用分号分隔,但我的正则表达式似乎不支持分号。

正确的格式应该是:

s@t.com;d@r.com

不应允许

s;r@t.com

使用正则表达式

myregex = "^['_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"

请指导。

【问题讨论】:

  • 为什么不简单string.split(";")
  • 您如何发送电子邮件?您可能应该拆分: 上的电子邮件并设置多个收件人。
  • 实际上我们已经在我们的 JPA 类中使用@Pattern 为字段设置了
  • 您有 1 封电子邮件的正则表达式,对吗?您想检查字符串是否包含 email + (; + email) {任意次数},对吗?然后,使用myregex = "['_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})"; String final_pattern = regex + "(?:;" + regex + ")*";。请注意,^$ 已从 regex 模式中删除。
  • 伙计们,这不是验证电子邮件的欺骗问题。 OP 有一个正则表达式,只需要确保多个分号分隔的电子邮件都能通过。

标签: java regex email


【解决方案1】:

您有 1 封电子邮件的正则表达式。

现在,您要检查字符串是否包含email + (; + email){任意次数}

您需要使用之前的模式作为没有锚的块,并像这样构建最终模式:

String myregex = "['_A-Za-z0-9-+]+(?:\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9]+)*\\.[A-Za-z]{2,}"; 
String final_pattern = "\\A" + regex + "(?:;" + regex + ")*" + "\\z";

regex demo

请注意,\A 是字符串的明确 开头,\z - 是字符串锚点的非常 结尾。

还要注意,字符类中的+ 失去了量词的特殊含义(1 次或更多次),并变成/被视为纯文字+ 符号。我还删除了不必要的分组并将所有捕获组转换为非捕获以进行“更干净”的匹配(如果您不需要捕获的值,为什么将它们存储在每个组的堆栈中?)。

【讨论】:

  • 感谢维克托。像魅力一样工作:)
【解决方案2】:

我认为如果你使用 string.split("_");你会好起来的。我用于我的 bodyremoveregex=(ÎÎÎÎΣ On Line)([,]* [0-9]:[0-9], [0-9]/[0-9] )*__(/**/) 并且它工作正常。你只需要在表达式之间添加 _ 。由于某种原因它没有在我的答案中显示 _ 符号所以想象一下我到处都有 __ 我意思是_。

【讨论】:

  • 你应该用反引号将code括起来(`code`),然后它将显示“原始”文本。
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多