除非允许,否则替换所有URL

时间:2012-11-20 04:38:59

标签: ruby regex gsub

我有一个正则表达式替换了给定字符串中的所有URL:

my_string = "www.example.com test www.mysite.com"
my_string.gsub!(/[a-zA-Z0-9\-\.]+\.(com|net|de|org|uk|biz|info|co.uk|es|de)(\/\S*)?/i,'(site hidden)')

由于上述原因,我得到:“(网站隐藏)测试(网站隐藏)”

我怎样才能改变正则表达式而不是取代www.mysite.com ???

这意味着替换应输出“(网站隐藏)测试www.mysite.com”

谢谢!

2 个答案:

答案 0 :(得分:3)

暴力怎么样? :)

my_string = "www.example.com test www.mysite.com"

regex = /[a-zA-Z0-9\-\.]+\.(com|net|de|org|uk|biz|info|co.uk|es|de)(\/\S*)?/i

uniq  = rand(2**1024).to_s

p my_string.gsub('mysite.com', uniq).gsub(regex, '(site hidden)').gsub(uniq, 'mysite.com')

请参阅live demo here

答案 1 :(得分:1)

您可以使用块来生成替换,如果它在允许的条目列表中,则使用原始文本:

my_string = "www.example.com test www.mysite.com"
allowed = %w(www.mysite.com)
re = %r/[a-zA-Z0-9\-\.]+\.(com|net|de|org|uk|biz|info|co.uk|es|de)(\/\S*)?/i
my_string.gsub!(re) do
  |m| allowed.include?(m) ? m : '(site hidden)'
end
puts my_string