Извлечение из документации (http://ruby -doc.org / core / classes / String.html # M001185 ), вот ответы на два ваших вопроса: «почему возвращаемое значение» один ттри «» и «что означает {$ 1 [0, 1]}?»
Что означает {$ 1 [0, 1]}? Метод String # sub может принимать либодва аргумента или один аргумент и блок.Последняя является формой, используемой здесь, и она похожа на метод Integer.times, который принимает блок:
5.times { puts "hello!" }
Так что это объясняет вьющиеся фигурные скобки.
$ 1 - это подстрокасоответствие первой группе захвата регулярного выражения, как описано здесь .[0, 1] - это строковый метод "[]", который возвращает подстроку, основанную на значениях массива - здесь, первый символ.
Если собрать вместе, {$ 1 [0, 1]} - это блок, которыйвозвращает первый символ в $ 1, где $ 1 - это подстрока, которая должна соответствовать группе захвата, когда регулярное выражение использовалось в последний раз для сопоставления со строкой.
Почему возвращаемое значение 'один t-три'? Метод String # sub (' substitute '), в отличие от своего брата String # gsub (' глобально заменитель '), заменяет первую часть строки, соответствующую регулярному выражению, его заменой.Следовательно, метод заменит первую подстроку, соответствующую «(t \ w *)», значением блока, описанного выше, то есть его первым символом.Поскольку 'two' - это первое совпадение подстроки (t \ w *) (за "t" следует любое количество букв), оно заменяется первым символом, "t".