使用ruby从文本中删除url

时间:2011-06-16 07:48:01

标签: ruby regex text substitution

鉴于文本,我想删除网址部分并留下其他文字。

示例:

'bla bla bla... bla bla bla... http://bit.ly/someuri bla bla bla...'

成为

'bla bla bla... bla bla bla... bla bla bla...'

是否有任何红宝石构建方法可以有效地执行此操作?

2 个答案:

答案 0 :(得分:9)

尝试使用正则表达式:

(?:f|ht)tps?:\/[^\s]+

答案 1 :(得分:4)

我刚刚找到Regular Expression - replace word except within a URL/URI并将代码修改为:

URI_REGEX = %r"((?:(?:[^ :/?#]+):)(?://(?:[^ /?#]*))(?:[^ ?#]*)(?:\?(?:[^ #]*))?(?:#(?:[^ ]*))?)"

def remove_uris(text)
  text.split(URI_REGEX).collect do |s|
    unless s =~ URI_REGEX
      s
    end
  end.join
end

我在rails控制台中测试它并按预期工作:

remove_uris('bla bla bla... bla bla bla... http://bit.ly/someuri bla bla bla...')
=> "bla bla bla... bla bla bla...  bla bla bla..."

如果有人有更好/更有效的解决方案,我会投票或接受它。感谢。