2012-03-14 3 views
1

Вот моя строка:Как получить эту часть строки?

http://media.example.com.s3.amazonaws.com/videos/1/123ab564we65a16a5w_web.m4v 

Я хочу это: 123ab564we65a16a5w

В только переменные, которые будут изменяться здесь являются /1/ и уникальный ключ, который я пытаюсь тянуть. Все остальное будет точно таким же.

Для части /1/, что 1 может быть где угодно от 1-3 цифр, но всегда будет числовым.

Я бегу Ruby 1.9.2.

+0

Можете ли вы привести несколько дополнительных примеров исходных строк? У них всегда будет «_web.m4v» в конце? Будет ли у вас всегда значение «/» до него? – TLS

+0

@TLS Сообщение обновлено. – Shpigford

ответ

5

Предполагая, что ничего больше изменений, вот регулярное выражение для этого:

http://media.example.com.s3.amazonaws.com/videos/\d{1,3}/(.*)_web.m4v 

Если есть другие изменения, вы должны позволить нам знать все переменные.

0

Поскольку вы указали, что значение, которое вы хотите всегда иметь «/» немедленно прежде чем он (и ни после него) и «_» сразу же после этого, вы можете использовать это родовое регулярное выражение:

^.*/(.*)_.*$ 

Вот почему это будет работать:

^ соответствует началу строки

.*/ совпадает с любым количеством символов до косой черты - это жадный, поэтому он не будет идти до последнего слеша в значении входного

(.*) совпадает с любым количеством символов и захватывает результата

_.* матчи подчеркивание, а затем любое число символов

$ соответствует концу строки

Сопоставляя все, что угодно до последнего «/», а затем ничего после «_», вы легко изолируете нужное значение.

ПРИМЕЧАНИЕ. Я не знаю, отличается ли синтаксис регулярного выражения Ruby от этого, поэтому ваш пробег может отличаться.

-

EDIT: Похоже, что в Ruby, вы не могли бы нуждаться/хотите ^ или $ в начале и в конце.

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