Ruby on rails 如何在Nokogiri的HTML代码中找到电子邮件地址?

Ruby on rails 如何在Nokogiri的HTML代码中找到电子邮件地址?,ruby-on-rails,ruby,regex,nokogiri,Ruby On Rails,Ruby,Regex,Nokogiri,如何在Nokogiri的HTML代码中找到电子邮件地址? 我想我需要使用正则表达式,但不知道如何使用 示例代码 <html> <title>Example</title> <body> This is an example text. example@example.com </body> </html> 例子 这是一个示例文本。 example@example.c

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

示例代码

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

例子
这是一个示例文本。
example@example.com
有一个答案涵盖了当有一个href要发送到时的情况,但这不是我的情况。电子邮件地址有时在链接中,但并不总是在链接中


谢谢

如果您只是想从一个碰巧是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
是有效的电子邮件地址,但不会与上面的正则表达式匹配

  • 建议如下:
  • 正则表达式来源:

只需在HTML字符串上使用正则表达式,无需使用Nokogiri(正如@deefour建议的那样)。对于正则表达式本身,我建议使用一个(称为
AUTO\u EMAIL\u RE
):

这将捕获那些更严格的正则表达式过滤器忽略的边缘情况:

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

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

RE.match('$A12345@example.com')
#=> #<MatchData "$A12345@example.com">
RE=/[\w.!\$%+-]+@[\w-]+(?:\[\w-]+)+/
重新匹配('abc@example.com')
#=> #
重新匹配('$A12345@example.com')
#=> #

请注意,如果您真的想匹配所有有效的电子邮件地址,您需要一个。

这绝对不是Nokogiri问题,而是ruby中的文本解析问题。我用
Ruby
regex
标记它,以改进您的回答。这不是一个完美的解决方案的原因是它只找到页面上的第一个电子邮件地址。这是一个完美的解决方案,可以解决这里提出的问题。这个问题与解析多个地址无关。
RE = /[\w.!#\$%+-]+@[\w-]+(?:\.[\w-]+)+/

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

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