繁体   English   中英

如何识别和处理文本字符串中的所有URL?

[英]How can I identify and process all URLs in a text string?

我想列举一个文本字符串中的所有URL,例如:

text = "fasòls http://george.it sdafsda"

对于找到的每个URL,我想调用一个函数method(...)来转换字符串。

现在我正在使用这样的方法:

msg = ""
for i in text.split
  if (i =~ URI::regexp).nil?
        msg += " " + i
      else 
         msg+= " " + method(i)
  end
end
text = msg

这可行,但是对于长字符串来说很慢。 我怎样才能加快速度?

我认为“ gsub”是您的朋友:

class UrlParser
  attr_accessor :text, :url_counter, :urls

  def initialize(text)
    @text = parse(text)
  end

  private
    def parse(text)
      @counter = 0
      @urls = []
      text.gsub(%r{(\A|\s+)(http://[^\s]+)}) do
        @urls << $2
        "#{$1}#{replace_url($2)}"
      end
    end

    def replace_url(url)
      @counter += 1
      "[#{@counter}]"
    end
end

parsed_url = UrlParser.new("one http://x.com/url two")
puts parsed_url.text
puts parsed_url.urls

如果确实需要快速解析长字符串,则应使用ragel构建ruby C扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM