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