2013-04-02 46 views
-1

我需要从URL中提取的后缀,这意味着:提取后缀

http://google.com/sports/golf =>运动/高尔夫 http://yahoo.com/blog?id=7 =>博客/ ID = 7

我怎么能acheive与正则表达式(红宝石样式)?

谢谢

+6

你不需要这样的正则表达式。 Ruby在stdlib中有一个'uri'库,它完全适合这个。查看URI.parse()http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html –

+0

你的问题不清楚。在什么规则下'?'变成'/'?你总是想要结果中的一个斜杠?等等 – sawa

回答

2

使用URI模块.path + .query

uri = URI("http://google.com/sports/golf") 
uri.path + "/" + uri.query 
+1

除此之外,如果你还需要,URI也会去除任何URI片段,即'sports/golf /?a = b#foo' foo将被剥离,但被保存在'uri.fragment'中 –

1

如何为以下::)

require 'uri' 
p URI.split("http://google.com/sports/golf").compact.drop(2).join("/") 
p URI.split("http://yahoo.com/blog?id=7").compact.drop(2).join("/") 

或者,

require 'uri' 

a = ["http://google.com/sports/golf","http://stackoverflow.com/questions/15766337/extract-suffix-from-url-regex/15766456#15766456","http://yahoo.com/blog?id=7"] 
a.each { |url| p URI.split(url).compact.drop(2).join("/") } 

输出:

"/sports/golf" 
"https://stackoverflow.com/questions/15766337/extract-suffix-from-url-regex/15766456/15766456" 
"/blog/id=7" 
1

试试这个:

irb(main):011:0> /(?:http:\/\/\w+\.\w+\/)(.+)/.match("http://yahoo.com/blog?id=7")[1] 
=> "blog?id=7" 
irb(main):012:0> /(?:http:\/\/\w+\.\w+\/)(.+)/.match("http://google.com/sports/golf")[1] 
=> "sports/golf" 
irb(main):013:0>