我有一个正则表达式替换了给定字符串中的所有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”
谢谢!
答案 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')
答案 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