匹配属于特定域及其子域的所有电子邮件地址

时间:2012-09-13 22:30:02

标签: ruby regex email string-matching

我希望匹配特定域中的所有电子邮件地址。

来自example.comfoo.example.com的任何电子邮件都应该匹配,其他所有内容都应该被拒绝。要做到这一点,我可以做一些基本的字符串匹配,以检查给定的字符串是否以example.com结尾,或者包含fooexample.com哪个可以正常工作,但这也意味着像`/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.example.com\b/i` 这样的东西会通过。

因此,基于上述要求,我开始研究一种可以通过域及其子域的模式。我能够提出以下正则表达式模式:

{{1}}

这只匹配了子域名,但我看到处理主域名的“How to match all email addresses at a specific domain using regex?”模式。

有没有办法将这两者合并为适用于any address from example.com的内容。

3 个答案:

答案 0 :(得分:2)

怎么样

/\b(?:(?![_.-])(?!.*[_.-]{2})[a-z0-9_.-]+(?<![_.-]))@(?:(?!-)(?!.*--)[a-z0-9-]+(?<!-)\.)*example\.com\b/i

答案 1 :(得分:0)

这个也会匹配&#39;标记&#39;和&#39; tagged-subdomain&#39;邮件如a+b@example.com和a+b@i.example.com

(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@(?:(?!-)(?!.*--)[a-z0-9-]+(?<!-)\.)*example\.com\b

希望它可以帮到你

答案 2 :(得分:0)

我建议阅读“Stop Validating Email Addresses With Your Complex Regex”。

从那时起,我会寻找:

/@.*\bexample\.com/

例如:

%w[foo@example.com foo@barexample.com foo@subdomain.example.com].grep(/@.*\bexample\.com/)
=> ["foo@example.com", "foo@subdomain.example.com"]

最终得到一个维护噩梦的正则表达式太容易了,而这并不能满足你的需求。我强烈建议保持简单。