3

如何使用 Nokogiri 在 HTML 代码中找到电子邮件地址?我想我需要使用正则表达式,但不知道如何。

示例代码

    <html>
    <title>Example</title>
    <body>
    This is an example text.
    example@example.com
    </body>
    </html>

当mail_to有href时,有一个答案涵盖了这种情况,但这不是我的情况。电子邮件地址有时位于链接内,但并非总是如此。

谢谢

4

2 回答 2

6

如果您只是试图从恰好是 HTML 的字符串中解析电子邮件地址,则不需要 Nokogiri。

html_string   = "Your HTML here..."
email_address = html_string.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i)[0]

不过,这不是一个完美的解决方案,因为 RFC 对构成“有效”电子邮件地址的内容非常宽松。这意味着您遇到的大多数正则表达式(包括上述一个)不考虑边缘情况有效地址。例如,根据 RFC

$A12345@example.com

是一个有效的电子邮件地址,但不会被上述正则表达式匹配。

于 2012-11-27T14:30:20.640 回答
1

只需在 HTML 字符串上使用正则表达式,不需要 Nokogiri(如@deefour 建议的那样)。对于正则表达式本身,我建议使用rails autolink gemAUTO_EMAIL_RE使用的那个(称为):

/[\w.!#\$%+-]+@[\w-]+(?:\.[\w-]+)+/

这应该可以捕捉到更严格的正则表达式过滤器遗漏的那些边缘情况:

RE = /[\w.!#\$%+-]+@[\w-]+(?:\.[\w-]+)+/

RE.match('abc@example.com')
#=> #<MatchData "abc@example.com">

RE.match('$A12345@example.com')
#=> #<MatchData "$A12345@example.com">

请注意,如果您真的想匹配所有有效的电子邮件地址,您将需要一个强大的大正则表达式

于 2012-11-27T14:45:50.800 回答