这是this post的后续问题。
我是Ruby新手,想要创建一个脚本来搜索文件中的模式。但是,我只想替换它的一部分,即删除所有http://
模式匹配,但只有 后跟一个有效的网址。
答案 0 :(得分:1)
如果“有效网址”表示该字符串可以作为网址解析,那么您可以尝试使用URI.parse
。例如:
require 'uri'
IO.readlines(input_file).each do |line|
line.gsub(%r;(https?://\S+);) do |url|
URI.parse(url) && '' rescue url
end
end
但是,URI
模块非常宽松。您会发现not-an-uri
之类的字符串被视为有效的“通用”URI。
您可能想要检查是否可以获取捕获的URL并返回成功的HTTP状态。这显然更加耗费资源,因此在大型输入文件上操作会非常慢。它也可能被视为安全风险。
require 'uri'
require 'net/http'
def valid_url?(url)
uri = URI.parse(url)
Net::HTTP.get_response(uri).is_a? Net::HTTPSuccess
rescue
return false
end
IO.readlines(input_file).each do |line|
line.gsub(%r;(https?://\S+);) do |url|
valid_url?(url) ? '' : url
end
end