2011-05-25 78 views
11

Ruby和Vim都使用帶替代命令的「g」來表示「全部出現」。 「g」代表什麼?在Ruby的「gsub」和Vim的替代命令中,「g」代表什麼?

具體地,在紅寶石,所述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中,01​​會去翻整個文件(這是什麼%手段),並替換每行一個發生,但:%s/foo/bar/g會做每一行所有出現。我的猜測是,在這兩種情況下,「g」的意思是「貪婪」,因爲Ruby命令和Vim命令都接受正則表達式,但我對貪婪匹配的理解是「匹配滿足這些條件的最長可能的子串標準,「不」匹配儘可能多的子串。「 (請參閱「Watch Out for The Greediness!」)

+0

也許它意味着「全球」? – 2011-05-25 12:41:25

回答

15

如果我沒記錯這意味着global,這this Wiki page似乎證實:

G標誌意味着全球性 - 每個 出現在線路發生變化, 而不僅僅是第一。

+0

很好找。我完成了':help:s'並低頭看着標誌部分,但它只是說'替換行中的所有事件。「 – 2011-05-25 12:45:37

+0

我的問題是模糊的,答案是否應該針對Vim或Ruby,或者兩者兼而有之,但由於您是迄今爲止唯一提供引用的人,我接受了這個答案。謝謝! – 2011-05-25 12:56:27

6

我認爲它代表「全球」。

在從:help :s VIM的幫助下:help s_flags:help gdefault說:

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

我也這麼認爲。谷歌圖書館發現哈爾富爾頓在The Ruby Way中做出這個斷言。 – 2011-05-25 12:55:39

1

我認爲, 「G」 代表着全球性的,但我可能是錯的。

1

我相信g標誌正則表達式== gloabl替代。對Ruby來說,這可能也是一樣的意思。

0

我認爲,「g」代表「貪婪」。它與正則表達式基礎更接近。