Java中包含多个电子邮件地址的正则表达式

3
我有一个要求,需要向客户发送多封电子邮件。
但是在向多个电子邮件地址发送电子邮件时,出现了问题。
例如,如果我写下:
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,})$"

请指导。

2
为什么不使用简单的 string.split(";") 呢? - Jens
实际上,我们在JPA类中使用@Pattern为字段设置了模式。 - sTg
所以我需要一个格式,在电子邮件地址后包含分号。没有其他选项。 - sTg
1
你有一个匹配1个电子邮件的正则表达式,对吧?你想要检查字符串是否包含电子邮件 + (; + 电子邮件) {任意次数},对吧?那么,使用 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 模式中删除。 - Wiktor Stribiżew
1
各位,这不是一个重复的问题来验证电子邮件。OP已经有了一个正则表达式,只需要确保多个分号分隔的电子邮件可以通过。 - Wiktor Stribiżew
显示剩余3条评论
2个回答

2

您已经有一个匹配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";

请查看正则表达式演示

请注意,\A是字符串的明确起始位置,而\z是字符串的绝对结束位置锚点。

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


1
谢谢Wiktor。运行得非常好 :) - sTg

0

我认为如果你使用string.split("_");,你会没问题的。我用的是bodyremoveregex=(ÎÎÎÎΣ On Line)([,]* [0-9]:[0-9], [0-9]/[0-9])*__(/**/),它正常工作。你只需要在表达式之间添加_。由于某种原因,在我的答案中不显示_符号,所以请想象我在__处的每个地方都是_。


你应该使用反引号(\``)将 code` 包裹起来,这样它就会显示为“原始”文本。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接