在Ruby的“gsub”和Vim的替换命令中,“g”代表什么?

时间:2011-05-25 12:38:05

标签: ruby regex vim

Ruby和Vim都使用“g”和替换命令来表示“所有出现”。 “g”代表什么?

具体来说,在Ruby中,String class有两个“子”命令:sub将仅替换第一个匹配项,gsub将替换所有匹配项。例如:

string = "One potato, two potato, three potato, four."
string.sub('potato','banana') # => "One banana, two potato, three potato, four."
string.gsub('potato','banana') # => "One banana, two banana, three banana, four."

同样,在Vim中,:%s/foo/bar将查看整个文件(%的意思)并且每行替换一次,但:%s/foo/bar/g将在每行上执行所有操作

我的猜测是,在这两种情况下,“g”表示“贪婪”,因为Ruby命令和Vim命令都接受正则表达式,但我对贪婪匹配的理解是“匹配满足这些条件的最长子字符串” ,“不”匹配尽可能多的子串。“ (参见“Watch Out for The Greediness!”)

5 个答案:

答案 0 :(得分:16)

如果我没记错,那就是globalthis Wiki page似乎确认了这一点:

  

g标志表示全局 - 每个   行中的出现发生了变化,   而不仅仅是第一个。

答案 1 :(得分:6)

我认为它代表“全球化”。

:help :s:help s_flags:help gdefault的vim帮助后说:

'gdefault' 'gd'         boolean (default off)
                        global

答案 2 :(得分:1)

我认为“g”代表全球,但我可能是错的。

答案 3 :(得分:1)

我相信正则表达式中的g标志== gloabl替换。可能与Ruby有相同的含义。

答案 4 :(得分:0)

我认为," g"代表" 贪心"。它与正则表达式基础更接近。