保存字符串的某个段

use*_*037 1 ruby string split

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

http://www.youtube.com/channel/xxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

如何保存之后出现的片段http://www.youtube.com/channel/,保存xxxxxx部分?

the*_*Man 7

这不仅仅是一个字符串,它是一个URL.URL有特殊注意事项,因此编写的类只是为了使用它们.

考虑一下URL是什么:它是对远程"资源"的引用,通常是某种文件.所以,我们可以使用一些文件名操作:

File.basename('http://www.youtube.com/channel/xxxxxxxxxxxxxx')
# => "xxxxxxxxxxxxxx"
Run Code Online (Sandbox Code Playgroud)

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

'http://www.youtube.com/channel/xxxxxxxxxxxxxx'.split('/').last
# => "xxxxxxxxxxxxxx"
Run Code Online (Sandbox Code Playgroud)

但是,一些网址查询或搜索信息,与片段,使双方沿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"
Run Code Online (Sandbox Code Playgroud)

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

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