Я нашел кое-что еще:
scan
, кажется, работает с использованием группы, если таковая имеется, поэтому поведение второй строки было таким. (используя последний соответствующий контент внутри ( )
и используйте его в результатах внутри массива.)
В качестве теста: (если групп несколько, все группы объединяются в один массив)
ruby-1.9.2-p0 > "hello world".scan(/((\w){2})/)
=> [["he", "e"], ["ll", "l"], ["wo", "o"], ["rl", "l"]]
Это способ получить его: всегда добавляйте верхний уровень ( )
и используйте map
, чтобы получить первый элемент в массиве (т. Е. Соответствие верхнего уровня):
ruby-1.9.2-p0 > "hello world".scan(/((\w){2})/).map {|e| e.first}
=> ["he", "ll", "wo", "rl"]
Но я все же хотел бы найти более простой ответ ...