Как бы я получил эту часть строки? - PullRequest
1 голос
/ 14 марта 2012

Вот моя строка:

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

Я хочу это: 123ab564we65a16a5w

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

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

Я бегуRuby 1.9.2.

Ответы [ 3 ]

5 голосов
/ 14 марта 2012

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

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

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

0 голосов
/ 14 марта 2012

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

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

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

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

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

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

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

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

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

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

-

РЕДАКТИРОВАТЬ: Похоже, в Ruby, вам не нужно / хотите ^ или $ в начале и в конце.

0 голосов
/ 14 марта 2012

Это короче -

s.split (/[/_]]/)[- 3]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...