我怎么能得到这部分字符串?

时间:2012-03-14 19:02:53

标签: ruby regex string

这是我的字符串:

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

我想要这个:123ab564we65a16a5w

此处将更改的变量是/1/和我想要提取的唯一键。其他一切都将完全相同。

对于/1/部分,1可以是1-3位数字,但始终为数字。

我正在运行Ruby 1.9.2。

3 个答案:

答案 0 :(得分:5)

假设没有其他变化,这里是正则表达式:

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

如果还有其他变化,您需要告诉我们所有变量。

答案 1 :(得分:0)

这个更短 -

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

答案 2 :(得分:0)

既然你已经表明你想要的值在它之前总是有一个“/”(之后没有)和紧跟在它之后的“_”,你可以使用这个通用的正则表达式:

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

这就是为什么这会起作用的原因:

^匹配行的开头

.*/匹配任意数量的字符直到斜杠 - 这是贪心的,所以它会一直到输入值的最后一个斜杠

(.*)匹配任意数量的字符并捕获结果

_.*匹配下划线,然后匹配任意数量的字符

$匹配行尾

通过匹配最后一个“/”以及“_”之后的任何内容,您可以轻松地隔离所需的值。

注意:我不知道Ruby正则表达式的语法是否与此不同,因此您的里程可能会有所不同。

-

编辑:看起来在Ruby中,您可能不需要/希望^$在开头和结尾。