如何从url获取文件扩展名?
新的红宝石,我将如何得到像URL文件扩展名:如何从url获取文件扩展名?
http://www.example.com/asdf123.gif
另外,我怎么会格式化该字符串,在C#中我会做:
string.format("http://www.example.com/{0}.{1}", filename, extension);
File.extname("test.rb") #=> ".rb"
File.extname("a/b/d/test.rb") #=> ".rb"
File.extname("test") #=> ""
File.extname(".profile") #=> ""
格式字符串
"http://www.example.com/%s.%s" % [filename, extension]
所以如果返回值是“”,我将如何检查在if语句中的那个?如果extesion ==“”? – Blankman 2010-11-06 15:26:58
'if extension.empty?' – 2010-11-06 16:16:23
它出现'File.extname'不会剥离查询字符串。所以如果你的网址是'http://www.example.com/download.mp3?hello = world',那么它会返回'.mp3?hello = world'。只是要记住。 – 2013-01-21 21:43:43
url = 'http://www.example.com/asdf123.gif'
extension = url.split('.').last
将为您获取URL的扩展名(以最简单的方式)。现在,对于输出格式:
printf "http://www.example.com/%s.%s", filename, extension
这两个解决方案都不处理查询参数,因此您可能需要添加URI.parse对于第二部分,“http://www.example.com/#{filename}.#{extension}”将会执行 – Zaki 2010-11-06 15:12:52
并且更精美的是' url.split('。')。last'和'“http://www.example.com/%s.%s”%[文件名,扩展名]'。 – 2010-11-06 15:13:01
如果URL是“http://www.example.com/dir”,该怎么办? – 2010-11-06 15:17:51
你可以使用Ruby的URI class这样得到的URI的片段(即文件的相对路径),并在一个点最后出现分裂它(这也将工作,如果URL中包含查询部分):
require 'uri'
your_url = 'http://www.example.com/asdf123.gif'
fragment = URI.split(your_url)[5]
extension = fragment.match(/\.([\w+-]+)$/)
同样,为什么只要调用'string.split()',正则表达式是必需的? – 2010-11-06 15:13:30
您在评论时删除了RegExp;) – AdrianoKF 2010-11-06 15:14:10
用于像“http://www.example.com/asdf123.php?myparam=1234.435.24”之类的赌场。 – 2010-11-06 15:14:42
这对文件与查询字符串
file = 'http://recyclewearfashion.com/stylesheets/page_css/page_css_4f308c6b1c83bb62e600001d.css?1343074150'
File.extname(URI.parse(file).path) # => '.css'
也返回“”如果文件没有扩展
我意识到这是一个古老的问题,但这里的使用Addressable另一次投票。您可以使用.extname
方法,该方法即使对查询字符串也按需要工作:
Addressable::URI.parse('http://www.example.com/asdf123.gif').extname # => ".gif"
Addressable::URI.parse('http://www.example.com/asdf123.gif?foo').extname # => ".gif"
我强烈建议使用URI或Addressable/URI库。尽管您可以使用格式化将值直接注入到URL中,但这些库提供了很多很好的功能,可以将URL拆分为组件,重建它,并确保url的结构正确。 – 2010-11-06 15:51:13