这是我的字符串:
http://media.example.com.s3.amazonaws.com/videos/1/123ab564we65a16a5w_web.m4v
我想要这个:123ab564we65a16a5w
此处将更改的仅变量是/1/
和我想要提取的唯一键。其他一切都将完全相同。
对于/1/
部分,1
可以是1-3位数字,但始终为数字。
我正在运行Ruby 1.9.2。
答案 0 :(得分:5)
假设没有其他变化,这里是正则表达式:
http://media.example.com.s3.amazonaws.com/videos/\d{1,3}/(.*)_web.m4v
如果还有其他变化,您需要告诉我们所有变量。
答案 1 :(得分:0)
这个更短 -
s.split(/[/_.]/)[- 3]
答案 2 :(得分:0)
既然你已经表明你想要的值在它之前总是有一个“/”(之后没有)和紧跟在它之后的“_”,你可以使用这个通用的正则表达式:
^.*/(.*)_.*$
这就是为什么这会起作用的原因:
^
匹配行的开头
.*/
匹配任意数量的字符直到斜杠 - 这是贪心的,所以它会一直到输入值的最后一个斜杠
(.*)
匹配任意数量的字符并捕获结果
_.*
匹配下划线,然后匹配任意数量的字符
$
匹配行尾
通过匹配最后一个“/”以及“_”之后的任何内容,您可以轻松地隔离所需的值。
注意:我不知道Ruby正则表达式的语法是否与此不同,因此您的里程可能会有所不同。
-
编辑:看起来在Ruby中,您可能不需要/希望^
或$
在开头和结尾。