当邮件的结构为“blabla@foo.com”时,我知道如何使用正则表达式验证电子邮件地址 有效的正则表达式如下所示:
([\w\-]([\.\w])+[\w]+@([\w\-]+\.)+[A-Za-z]{2,4})
但是在我的大学,我的教授确实有他们的电子邮件地址如下所示的网站:prof[at]foo.bla
此类电子邮件的正确正则表达式是什么?将@
更改为[at]
无效。
是否有针对此类问题的教程?你能推荐一下吗?
答案 0 :(得分:3)
您可以在此处使用可选捕获 - 组中的|
字符可用作逻辑or
,因此:
(\w-+[\w]+(@|\[at\])([\w-]+.)+[A-Za-z]{2,4})
应该做的伎俩。如果您对它不感兴趣,可以将其设置为非捕获组(?:@|\[at\])
。另请注意,方括号是转义的 - 如果要将它们视为文字字符而不是字符组指示符,则需要转义它们。
更新
由于您没有在原始问题中指定您使用的语言,因此我建议您使用该语言:
Pattern emailRe = Pattern.compile("(\\w[\\w.+\\-]+?(?:@|\\[at\\])[\\w\\-]+\\.[\\w\\-.]+)");
相反,它是一个更加坚实的模式。然后,您可以根据需要多次重复使用它来匹配字符串中的电子邮件,例如:emailRe.match(your_string)
...
答案 1 :(得分:2)
您可以使用(\w[-.\w]+(?:@|\[at\])[\w-]+\.[A-Za-z]{2,4})
只需添加一个非捕获组或锚|
以匹配@
或\[at\]
,如上所述here
注意:您无需在-
.
和[]
答案 2 :(得分:1)
[
和]
]在正则表达式中具有特殊含义,因此您必须将它们转义为字面匹配。因此,请在正则表达式中将@
替换为\[at\]
。
([\w\-]([\.\w])+[\w]+\[at\]([\w\-]+\.)+[A-Za-z]{2,4})
您可以在regular-expression.info找到正则表达式教程。