Ruby 如何让gsub替换IP地址,而不仅仅是IP地址的一部分?

Ruby 如何让gsub替换IP地址,而不仅仅是IP地址的一部分?,ruby,Ruby,以下是我的示例数据: 192.168.1.1 192.168.1.11 在bash中,我可以简单地执行cat file.txt | grep-w 192.168.1.1,它只抓取192.168.1.1,而不是192.168.1.11 然而,在Ruby中,当我试图替换192.168.1.1时,它实际上也替换了192.168.1.11。以下是我正在做的: replace_array = ['192.168.1.1','x','xx','xx] replace_array.each {|s| dat

以下是我的示例数据:

192.168.1.1
192.168.1.11
在bash中,我可以简单地执行
cat file.txt | grep-w 192.168.1.1
,它只抓取192.168.1.1,而不是192.168.1.11

然而,在Ruby中,当我试图替换
192.168.1.1
时,它实际上也替换了
192.168.1.11
。以下是我正在做的:

replace_array = ['192.168.1.1','x','xx','xx]
replace_array.each {|s| data.gsub!(/#{s}/i, "[redacted]")}
但这使得
192.168.1.11
看起来像
[reded]1
,如下例所示:

2.5.8 :005 > replace_array = ["192.168.1.1","x","xx","xxx"]
 => ["192.168.1.1", "x", "xx", "xxx"]
2.5.8 :006 > data = "192.168.1.1\n192.168.1.11"
 => "192.168.1.1\n192.168.1.11"
2.5.8 :007 > replace_array.each {|s| data.gsub!(/#{s}/i, "[redacted]")}
 => ["192.168.1.1", "x", "xx", "xxx"]
2.5.8 :008 > data
 => "[redacted]\n[redacted]1"
2.5.8 :009 >

只是简单地尝试用gsub替换精确匹配。

因此我意识到答案只是在字符串前后添加
\b
,如下所示:

replace_array.each {|s| data.gsub!(/\b#{s}\b/i, "[redacted]")}
问题解决了


参考资料:

它正在取代第一场比赛,只是不是你期望的方式。如果希望数组中的第一个模式匹配整个字符串而不是其中的一部分,则数组中的第一个模式应为“
”^192.168.1.1$”

替换第一个匹配不是问题。事实上,第二个数组元素也被替换了。我也无法控制数组中的内容,所以我只是想找出一种方法来获取给定的日期并应用解决方案。谢谢