[英]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.