保存字符串的某个段

时间:2014-06-10 16:29:32

标签: ruby string split

我想拆分一个字符串并保存在另一个段之后发生的段。例如

http://www.youtube.com/channel/xxxxxxxxxxxxxx

如何保存http://www.youtube.com/channel/后显示的细分,保存xxxxxx部分?

2 个答案:

答案 0 :(得分:7)

这不仅仅是一个字符串,而是一个URL。 URL有特殊注意事项,因此只编写了一些类来处理它们。

考虑URL是什么:它是对远程“资源”的引用,通常是某种文件。因此,我们可以使用一些文件名操作:

File.basename('http://www.youtube.com/channel/xxxxxxxxxxxxxx')
# => "xxxxxxxxxxxxxx"

文件的basename方法不是很聪明,因为它只查找像'/'这样的目录定界符。我们可以使用split来完成同样的事情:

'http://www.youtube.com/channel/xxxxxxxxxxxxxx'.split('/').last
# => "xxxxxxxxxxxxxx"

但是,有些网址包含查询或搜索信息,以及使basenamesplit分崩离析的片段:

File.basename('http://www.youtube.com/channel/xxxxxxxxxxxxxx?foo=bar#1')
# => "xxxxxxxxxxxxxx?foo=bar#1"

'http://www.youtube.com/channel/xxxxxxxxxxxxxx?foo=bar#1'.split('/').last
# => "xxxxxxxxxxxxxx?foo=bar#1"

如此简单地将其视为文件名将无法正常工作并将其剥离,您也可以使用URL解析器。使用Ruby的内置URI类将有所帮助:

require 'uri'
path = URI.parse('http://www.youtube.com/channel/xxxxxxxxxxxxxx?foo=bar#1').path # => "/channel/xxxxxxxxxxxxxx"
File.basename(path) # => "xxxxxxxxxxxxxx"

答案 1 :(得分:0)

如果你要做的就是保存URL的最后一部分,你可以在字符串上循环,保存每个' /'的索引。成阵列。然后创建一个从该索引运行直到字符串结尾的新子字符串。我认为它看起来像这样......

indices = (0..url_string.length).find_all { |i| url_string[i] == "/" }
desired_substring = url_string[indices[-1],url_string.length-1]