1

params[:svn_path]正在返回这样的 URL

http://svn.repos.mywebsite.com/testingtitle.documents

现在我只需要获取 url 的最后一部分,即testingtitle.

我们如何得到它?

提前致谢

4

7 回答 7

3

您可以使用ruby​​ 的Uri 模块

uri = URI.parse("http://svn.repos.mywebsite.com/testingtitle.documents")

path = uri.path #"/testingtitle.documents"
path_with_no_slash = path.gsub("/", "") #"testingtitle.documents"
array = path_with_no_slash.split(".") #["testingtitle", "documents"]
result = array[0] #"testingtitle"
于 2012-11-15T09:46:41.913 回答
2

您应该使用正则表达式来获得您所期望的。

这是一个很好的例子

于 2012-11-15T09:45:42.523 回答
2

您可以使用File.basename; 例如

url = "http://svn.repos.mywebsite.com/testingtitle.documents"
ext = File.extname(url)
result = File.basename(url, ext)

的第二个参数basename负责删除文件扩展名。result将保持所需的结果。

于 2012-11-15T09:49:26.437 回答
2

使用正确的 URI 解析器 -

正如您所说,这将为您提供网址的最后一部分。

require 'uri'

url       = "http://svn.repos.mywebsite.com/testingtitle.documents"    
last_part = URI(url).path.split('/').last # => testingtitle.documents

但是,您提供的输出将需要对最后一部分进行更多操作,即拆分.

last_part.split('.').first # => testingtitle

简单的字符串操作 -

url = "http://svn.repos.mywebsite.com/testingtitle.documents"
url.split('/').last.split('.').first # => testingtitle 
于 2012-11-15T10:04:42.257 回答
1

试试这个:

params[:svn_path].match(/.*\.com\/(.*)\..*$/)[1]

1.9.3p194 :009 > params[:svn_path].match(/.*\.com\/(.*)\..*$/)[1]
 => "testingtitle" 
于 2012-11-15T09:44:18.180 回答
1

您可以使用URI解析此网址:

url = URI.parse('http://svn.repos.mywebsite.com/testingtitle.documents')

这将为您提供一个包含以下变量的对象:

url.instance_variables #> [ :@scheme, :@user, :@password, :@host, :@port, :@path, :@query, :@opaque, :@registry, :@fragment, :@parser ]

然后在path组件上使用一个简单的正则表达式,如下所示:

url.path.match(/\w+/) #> #<MatchData "testingtitle">

这将匹配任何单词字符的第一次出现(不包括 / 或 .)

于 2012-11-15T09:53:22.350 回答
1

Regexp+groups

url = 'http://svn.repos.mywebsite.com/testingtitle.documents'
puts url.match(/com\/([a-z]+)/)[1]
#=> testingtitle
于 2012-11-15T10:21:08.437 回答