Ruby regexp:捕获url的路径

从我想要提取其路径的任何URL。

例如:

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

这应该不难:

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

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

我建议你不要用正则表达式做这个,而是使用内置的URI lib:

 require 'uri' uri = URI::parse('http://stackoverflow.com/questions/ask') puts uri.path # results in: /questions/ask 

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

在这种情况下,您可以使用正则表达式,这比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所说的那样,更具可读性。

ctcherry提出的方法是完全正确的,但我更喜欢使用request.fullpath而不是在代码中包含URI库。 只需在视图或控制器中调用request.fullpath 。 但要小心,如果你的URL中有任何GET参数,它将被捕获,在这种情况下使用split('?').first