Ruby regexp:捕获url的路径

时间:2011-02-26 20:35:27

标签: ruby regex

我想从任何网址中提取其路径。

例如:

网址:https://stackoverflow.com/questions/ask 路径:问题/问题

这应该不难:

url[/(?:\w{2,}\/).+/]

但我认为我使用错误的模式'忽略这个'('?:' - 不起作用)。什么是正确的方法?

3 个答案:

答案 0 :(得分:24)

我建议您不要使用正则表达式执行此操作,而是使用内置URI lib:

require 'uri'

uri = URI::parse('http://stackoverflow.com/questions/ask')

puts uri.path # results in: /questions/ask

它有一个领先的斜杠,但这很容易处理=)

答案 1 :(得分:3)

在这种情况下,你可以使用正则表达式,它比URI.parse

更快
s = 'http://stackoverflow.com/questions/ask'

s[s[/.*?\/\/[^\/]*\//].size..-1]
# => "questions/ask"  (6,8 times faster)

s[/\/(?!.*\.).*/]
# => "/questions/ask" (9,9 times faster, but with an extra slash)

但如果你不关心速度,使用 uri ,正如ctcherry所示,更具可读性。

答案 2 :(得分:-1)

ctcherry提出的方法是完全正确的,但我更喜欢使用request.fullpath而不是在代码中包含URI库。只需在您的视图或控制器中调用request.fullpath即可。但请注意,如果您的网址中有任何GET参数,则会捕获它,在这种情况下使用split('?').first