在Ruby的“gsub”和Vim的替换命令中,“g”代表什么?
Ruby和Vim都使用“g”和替换命令来表示“所有事件”。 “g”代表什么?
具体来说,在Ruby中, String类有两个“子”命令: 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命令都接受正则表达式,但我对贪婪匹配的理解是“匹配符合这些条件的最长子串”,而不是“匹配尽可能多的子串。” (参见“ 注意贪婪! ”)
如果我没记错的话,这意味着global
, 这个Wiki页面似乎证实:
g标志表示全局 – 行中的每个事件都会更改,而不仅仅是第一个。
我认为它代表“全球化”。
在vim的帮助下:help :s
to :help s_flags
to :help gdefault
说:
'gdefault' 'gd' boolean (default off) global
我认为“g”代表全球,但我可能是错的。
我相信正则表达式中的g
标志== gloabl
替换。 可能与Ruby的含义相同。
我认为,“g”代表“ 贪婪 ”。 它与正则表达式基础更接近。