我想从任何网址中提取其路径。
例如:
网址:https://stackoverflow.com/questions/ask 路径:问题/问题
这应该不难:
url[/(?:\w{2,}\/).+/]
但我认为我使用错误的模式'忽略这个'('?:' - 不起作用)。什么是正确的方法?
答案 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