Java 无法匹配myname@myemail.edu.in在爪哇

Java 无法匹配myname@myemail.edu.in在爪哇,java,regex,email,Java,Regex,Email,我正在尝试匹配字符串m-y\n。ame@myemail.edu.in使用以下正则表达式: ([_A-Za-z0-9-.]+@[a-z0-9-]+[.][a-z]{2,3}[.][a-z]{2,3}) 完整的正则表达式是: ([-A-Za-z0-9._!#$%^&*|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{2,3}[\\.][a-z]{2,3})|([A-Za-z0-9.!#$%^&*|{}\"~`]+@[a-z0-9_-]+[\\.][a-z]

我正在尝试匹配字符串m-y\n。ame@myemail.edu.in使用以下正则表达式:

    ([_A-Za-z0-9-.]+@[a-z0-9-]+[.][a-z]{2,3}[.][a-z]{2,3})
完整的正则表达式是:

   ([-A-Za-z0-9._!#$%^&*|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{2,3}[\\.][a-z]{2,3})|([A-Za-z0-9.!#$%^&*|{}\"~`]+@[a-z0-9_-]+[\\.][a-z]{4})|([A-Z.a-z0-9!#$%^&*|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{3})|([A-Za-z0-9.!#$%^&*_-|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{2})
为了能够匹配指定的模式,我需要对正则表达式进行哪些更改

以下是我的一些测试用例:

 1.vamsi$deepak0@gmail.com
 2.v_a_m_s_i_d_e_e_p_a_k_0_3@gmail.com
 3.v-a-m_si.deepak@gmail.com
 4.vamsi$deepak03@gmail.co.in
 5.v_a_m_s_i_d_e_e_p_a_k_0_3@gmail.co.in
 6.v-a-m_si.deepak@gmail.co.in
 7.vamsideepask03@bits-pilani.edu
 8.vams-ideep_ask03@bits-pilani.edu
 9.vamsi-d_.eepak03@gmool.biz
 10.songs@gaana.in
 11.vamsideep_-.ak03@footfall.net
 12.jackspa_-.rrow@pirates.org
 13.nomorespaceshuttles@nasa.gov
 The most scary test case seems to be  
 14.vamsideepak@gmail.iovamsideepak@gmail.comvamsideepak0@gmail.co.invamsideepak@gmail.info
正则表达式Iam当前正在使用匹配项

    vamsideepak@gmail.iova,msideepak@gmail.comv
依此类推。如果我将使用的表达式的顺序颠倒,以匹配后面字符数较少的表达式,则会导致反转匹配值,如下所示:

    vamsideepak@gmail.io,vamsideepak@gmail.co
等等


我应该如何确保与案例14正确匹配。我应该分别使用这些组进行验证吗

这应该适合您:

[A-Za-z0-9!#$%&’*+-/=?^_`\.{|}~]+@([a-z0-9_-]+[\.]?)*

下面函数中的正则表达式匹配myname@myemail.edu.in同时防止无效电子邮件。例如,它可以防止电子邮件地址中的相邻句点,如我的。。name@myemail.edu.in根据RFC 822,这是无效的

public static boolean isValidEmail(String email) {
    return email.matches("\\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,4}\\z")
        && email.matches("^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
}

请参阅。

您的正则表达式最大值应为
^[^@]+@[^@]+$
。要稍微缩短正则表达式,您可以使用
\w
(用Java编写为
\\w
)而不是
[\u a-Za-z0-9]
。电子邮件地址也可以以
.
开头吗?根据这个答案,它可以以许多特殊字符开头:@Anirudh谢谢你的链接,我的应用程序不会向任何人发送验证电子邮件,因此我没有其他方法验证电子邮件在rubular和regexplanet上进行测试后,我发现它只能识别域名以下的电子邮件。我也可以使用[.]而不是[\.]。还有一件事,我想从同一个字符串中提取多封电子邮件,但我无法隐式信任我的来源。我在myname@myemail.comyourname@youremail.com是字符串的一部分。在这种情况下我该怎么办?请查看案例14。发生这种情况的可能性不是很小。我可以修改我在中使用的表达式吗为了匹配案例14,因为我的字符串非常大而且非常不规则。我希望我只是像你一样匹配电子邮件。另外,我知道gov.in是有效的,所以[\.][a-z]{2,3}[\.][a-z]{2}是有效的。对于案例14,你需要在电子邮件地址之间使用某种分隔符,否则几乎不可能正确匹配字符串。我提供的正则表达式应该能够验证gov.in