清理字符串以使用Regex获取电子邮件

时间:2014-09-02 22:37:01

标签: ruby regex

我有一个ruby代码,用于从页面中提取电子邮件地址。我的代码输出电子邮件地址,但也会捕获其他文本。

我想从这个字符串中提取实际的电子邮件。有时,字符串将包含mailto,有时它不会。我试图获得在@之前出现的单个单词,以及使用分割后在@之后出现的任何内容,但我遇到了麻烦。有任何想法吗?谢谢!

href="mailto:someonesname@domain.rr.com"> |  Email</a></td>

3 个答案:

答案 0 :(得分:2)

使用预建的东西:

require 'uri'

addresses = URI.extract(<<EOT, :mailto)
this is some text. mailto:foo@bar.com and more text
and some more http://foo@bar.com text
href="mailto:someonesname@domain.rr.com"> |  Email</a></td>
EOT
addresses # => ["mailto:foo@bar.com", "mailto:someonesname@domain.rr.com"]

URI附带Ruby,用于解析URI的模式经过了充分测试。它不是防弹的,但效果很好。如果您获得误报,可以使用selectrejectgrep块来过滤掉所返回的不需要的条目。

如果您不能依靠mailto:,则问题会变得更加困难,因为电子邮件地址不易解析;它们的变化太大了。问题类似于使用模式验证电子邮件地址,因为地址格式再次变化太大。 &#34; Using a regular expression to validate an email address&#34;和&#34; JavaScript Email Validation when there are (soon to be) 1000's of TLD's?&#34;是更好的读取更多信息。

答案 1 :(得分:2)

这也应该可以很好地解决无效电子邮件格式 - 它只会根据您的两个用例提取电子邮件地址。

string[/[^\"\:](\w+@.*)(?=\")/]

答案 2 :(得分:1)

这应该有效

inputstring[/href="[^"]+"/][6 .. -2].gsub("mailto:", "")

说明:

  • 抓住href属性及其内容
  • 删除href=和qoutes
  • 删除mailto:(如果有)

实施例

irb(main):021:0> test = "href=\"mailto:francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
=> "href=\"mailto:francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
irb(main):022:0> test[/href="[^"]+"/][6 .. -2].gsub("mailto:", "")
=> "francesco@hawaii.rr.com"
irb(main):023:0> test = "href=\"francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
=> "href=\"francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
irb(main):024:0> test[/href="[^"]+"/][6 .. -2].gsub("mailto:", "")
=> "francesco@hawaii.rr.com"