Используйте Slice для позиционного извлечения
Если вы всегда хотите извлечь 4-й элемент (включая схему) из URI и уверены, что ваши данные регулярные, вы можете использовать Array # slice следующим образом.
'http://www.example.com/value/1234/different-value'.split('/').slice 4
#=> "1234"
'http://www.example.com/value/1234/different-value/'.split('/').slice 4
#=> "1234"
Это будет надежно работать независимо от того, есть ли косая черта или нет, есть ли у вас больше , чем 4 элемента после разделения, и независимо от того, есть ли у вас или нетэтот четвертый элемент всегда строго числовой.Это работает, потому что это основано на положении элемента в пути, а не на содержимом элемента.Однако в результате вы получите nil , если попытаетесь проанализировать URI с меньшим количеством элементов, таких как http://www.example.com/1234/
.
Использовать сканирование / сопоставление для извлечения шаблона
В качестве альтернативы, если вы знаете, что искомый элемент всегда является единственным, полностью состоящим из цифр, вы можете использовать String # match с осмотрами для извлечения только числовой части строки.
'http://www.example.com/value/1234/different-value'.match %r{(?<=/)\d+(?=/)}
#=> #<MatchData "1234">
$&
#=> "1234"
Обратные и прогнозные утверждения необходимы для привязки выражения к пути.Без них вы тоже подберете такие вещи, как w3.example.com
.Это решение является лучшим подходом, если позиция целевого элемента может измениться, и если вы можете гарантировать, что ваш интересующий элемент будет единственным, который соответствует привязанному регулярному выражению.
Еслибудет более одного совпадения (например, http://www.example.com/1234/5678/
), тогда вы можете использовать String # scan вместо того, чтобы выбрать первое или последнее совпадение.Это одна из тех вещей, которые «знают ваши данные»;если у вас неправильные данные, то регулярные выражения не всегда являются лучшим выбором.