我有一个ruby代码,用于从页面中提取电子邮件地址。我的代码输出电子邮件地址,但也会捕获其他文本。
我想从这个字符串中提取实际的电子邮件。有时,字符串将包含mailto,有时它不会。我试图获得在@之前出现的单个单词,以及使用分割后在@之后出现的任何内容,但我遇到了麻烦。有任何想法吗?谢谢!
href="mailto:someonesname@domain.rr.com"> | Email</a></td>
答案 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的模式经过了充分测试。它不是防弹的,但效果很好。如果您获得误报,可以使用select
,reject
或grep
块来过滤掉所返回的不需要的条目。
如果您不能依靠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=
和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"