正则表达式替换Ruby中的值

时间:2014-10-11 06:44:32

标签: ruby regex

我尝试用字符串中的example.com替换所有<a href="http://example.com">example.com</a>个实例:

content.gsub(/example\.com/, '<a href="http://example.com">example.com</a>')

但如果前面有一个点,我就不想替换example.com,就像在www.example.com中一样。所以我的第一个想法是制作正则表达式/[^\.]example.com/。但是,当然,gsub!也会替换example.com之前的字符。

在Ruby中,是否有一种简单的方法可以替换前面没有example.com的所有.

2 个答案:

答案 0 :(得分:2)

我会以负面的观察结果来做这件事:

content.gsub(/((?<!\.)example.com)/i , '<a href="http://\1">\1</a>')

表示(?<!\.)的部分字面意思是“如果之前没有.”。

负面的后视是零宽度断言,所以它不是匹配的一部分,因此不会被替换。

请注意,这些仅在Ruby 1.9 +

中受支持

此示例还捕获域本身,以便可以在替换中使用它,这样可以轻松地将其与变量交换,并使其不区分大小写(通过使用/i结束表达式)只因为它对我更有意义。

答案 1 :(得分:1)

您可以在back reference中使用gsub

content.gsub(/(^|[^.])example\.com/, '\\1<a href="http://example.com">example.com</a>')

(^|[^.])将匹配输入或非点字符的开头。