2016-09-02 3 views
1

мне было интересно, как лучше идти о расщеплении следующую строку, / но игнорируя определенные символыраскол URL на основе символов - Руби

Так что моя строка (ну URL) будет выглядеть следующим образом

url = http://10.0.3.2/i/av/Genymotionvbox86p/android/10~3~1/0/-/-/a3306aa6~0346~4ad5~bdf5~1bc7c20a88ab/0/test~page/-/-/video/live/-/one_hd/-/0/1/0~0/-/0~0/0~0/?trace=skwthffdsy 

Я хочу разделить на / игнорируя http:// и строку запроса в конце концов, желаемый результат будет выглядеть

["i", "av", "Genymotionvbox86p", "android", "10~3~1", "0", "-", "-", 
    "a3306aa6~0346~4ad5~bdf5~1bc7c20a88ab", "0", "test~page", "-", "-", 
    "video", "live", "-", "one_hd", "-", "0", "1", "0~0", "-", "0~0", "0~0"] 

Итак, на данный момент url.split('/') достает меня до сих пор, но ее исключающие или определенные символы я застрял на

Возможно, использование scan послужит мне лучше?

Любая помощь приветствуется

Спасибо

+0

Вы * знаете *, что URL-адрес всегда будет в этом формате? Будет ли «http (s): //« всегда присутствовать? Всегда ли будет «/» перед любыми параметрами в конце? 'url.split ('/') [3 ..- 2]' является тривиальным решением, но не будет работать для многих возможных форматов URL. –

+0

да url 'should' всегда должен быть в этом формате, я не могу предусмотреть время, когда http (s) появятся где-нибудь еще. Я подумал о том, чтобы взять URL-адрес, а затем использовать 'gsub', чтобы удалить то, чего я не хочу, но после добавления дополнительных параметров в строку решение, похоже, все еще работает – Richlewis

+0

Вы уверены? !! ..." www.google. com/search? q = example "является допустимым URL-адресом, который не имеет ни одного из этих свойств. Метод 'split ('/') [3 ..- 2]' для этого не сработает. –

ответ

5

Попробуйте это:

require 'uri' 
URI(url).path.sub(%r{^/}, "").split("/") 

Редактировать: зачем использовать gsub, когда короче и быстрее sub отлично.

1

может быть что-то вроде этого?

url.split('/')[3..-2] 

[3..-2] означает объем массива, он принимает все элементы из индекса 3 индексировать -2

-2 

означает один позапрошлый

+0

спасибо, не могли бы вы объяснить '[3 ..- 2]' пожалуйста? – Richlewis

+0

http://ruby-doc.org/core-2.3.1/Array.html # method-i-5B-5D –

+0

Смотрите: 'ary [range]' –

Смежные вопросы