0

我有一个正则表达式,它替换了给定字符串中的所有 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 ???

这意味着替换应该输出“(site hidden) test www.mysite.com”

谢谢 !

4

2 回答 2

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')

在此处查看现场演示

于 2012-11-20T04:48:59.883 回答
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
于 2012-11-20T05:06:11.723 回答