Что означает «g» в «gsub» Руби и в команде замены Vim? - PullRequest
12 голосов
/ 25 мая 2011

Как Ruby, так и Vim используют «g» с командами подстановки для обозначения «всех вхождений». Что означает "g"?

В частности, в Ruby класс String имеет две команды "sub": 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 принимают регулярное выражение, но мое понимание жадного сопоставления «соответствует самой длинной из возможных подстрок, удовлетворяющих этим критериям» , "not" соответствует как можно большему числу подстрок. " (См. " Остерегайтесь Жадности! ")

Ответы [ 5 ]

16 голосов
/ 25 мая 2011

Если я правильно помню, это означает global, что этой вики-странице , кажется, подтверждает:

Флаг g означает глобальный - каждое вхождение в строке изменяетсяа не только первый.

6 голосов
/ 25 мая 2011

Я думаю, что это означает "глобальный".

После помощи vim от :help :s до :help s_flags до :help gdefault говорит:

'gdefault' 'gd'         boolean (default off)
                        global
1 голос
/ 25 мая 2011

Я считаю, что флаг g в регулярном выражении == gloabl замена.Вероятно, то же самое значение для Ruby.

1 голос
/ 25 мая 2011

Я думал, что "g" означает глобальный, но я могу ошибаться.

0 голосов
/ 30 января 2013

Я думаю, "g" означает " жадный ".Это ближе к основам регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...