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">

すべての有効なメール アドレスを本当に一致させたい場合は、非常に大きな regexが必要になることに注意してください。

于 2012-11-27T14:45:50.800 に答える