正则表达式帮助:试图找到一个电子邮件地址

时间:2012-09-28 09:32:36

标签: regex regex-lookarounds

尝试使用Eclipse正则表达式搜索在特定用户不是user.a@domain.com或user.b@domain.com的文件中查找电子邮件地址(即anything@domain.com)。

需要使用粗体项下面的字符串,而需要跳过其他地址: 的 bob@domain.com 下,user.b @ domain.com,的 andy@domain.com 下,user.a @ domain.com

我已经达到了以下目的但是我认为不应该这样做。 \ B(?!user.b)\ w*@domain.com \ B'/ P>

3 个答案:

答案 0 :(得分:3)

^(?!user\.b@domain.com|user\.a@domain.com).*[\w]+[\w]?[\w./]+@[\w_]+\.[a-zA-Z]+\.?[a-zA-Z]{2,4}$

这将查找所有电子邮件地址,无论域名如何,只需保留附加到列表中即可 user\.b@domain.com|user\.a@domain.com|个更多电子邮件地址并转义"."

答案 1 :(得分:0)

我不确定您的确切要求,但这将匹配任何非形式用户。[字母和数字] @ domain.com(并且左侧不包含.)。

(?<!user\.)\w+@domain\.com\b

您的原件有几个问题:

  • 。是一个单词边界,因此您可以将“a@domain.com”与“user.a@domain.com”匹配。
  • 正则表达式中的
  • .是元字符,所以你必须逃脱它。
  • 您需要使用后视断言而不是简单的(?! ... )构造。

更新:here is the Perl regex documentation。一般而言,Eclipse遵循这一点。

进一步更新:只是为了澄清,我的代码与任何包含@左边的点的电子邮件地址都不匹配。如果你需要将其他地址与点匹配,由于lookbehind的性质,它实际上开始变得非常复杂。此修改版本将匹配地址与除用户之外的任何内容。后跟1到5个字符。

[\w\.]+(?<!user\.\w{1,5})@domain\.com\b

答案 2 :(得分:-1)

实际上,我们不建议使用正则表达式检查电子邮件地址,您可以做的最好的事情就是发送确认电子邮件。我同意,这并不总是可行的,但这是你可以拥有的最可靠的方式。

请参阅http://davidcelis.com/blog/2012/09/06/stop-validating-email-addresses-with-regex/中的详细信息以及随附的reddit讨论http://de.reddit.com/r/programming/comments/zgumq/stop_validating_email_addresses_with_regex/