Я новичок в 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
не может, и наоборот. Любой конкретный сценарий, который может выполнить только один? соответствует
второстепенным из сканирования
?