В чем разница между сканированием и сопоставлением в строке Ruby

Я новичок в Ruby и всегда использовал String.scan для поиска первого вхождения числа. Странно, что возвращаемое значение находится во вложенном массиве, но я просто использую [0][0] для значений, которые мне нужны. (Я уверен, что у него есть свое предназначение, но я еще не использовал его.)

Я только что узнал, что существует метод String.match . И это кажется более удобным, потому что возвращаемый массив не является вложенным.

Вот их пример, сначала сканирование:

>> 'a 1-night stay'.scan(/(a )?(\d*)[- ]night/i).to_a
=> [["a ", "1"]]

затем совпадение

>> 'a 1-night stay'.match(/(a )?(\d*)[- ]night/i).to_a
=> ["a 1-night", "a ", "1"]

Я проверил API, но я не могу реально различить разницу, так как оба ссылаются на «соответствие шаблону».

Этот вопрос просто из любопытства о том, что сканирование может сделать, что match не может, и наоборот. Любой конкретный сценарий, который может выполнить только один? соответствует второстепенным из сканирования ?

44
задан lulalala 3 November 2011 в 10:53
поделиться