开发者

Ruby regexp: capture the path of url

开发者 https://www.devze.com 2023-02-13 10:27 出处:网络
From any URL I want to extract its path. For example: URL: https://stackoverflow.com/questions/ask Path: questions/ask

From any URL I want to extract its path.

For example:

URL: https://stackoverflow.com/questions/ask Path: questions/ask

It shouldn't be difficult:

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

But I think I use a wrong pattern for 'ignore this' ('?:' - does开发者_StackOverflow中文版n't work). What is the right way?


I would suggest you don't do this with a regular expression, and instead use the built in URI lib:

require 'uri'

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

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

It has a leading slash, but thats easy to deal with =)


You can use regex in this case, which is faster than 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)

But if you don't care with the speed, use uri, as ctcherry showed, is more readable.


The approach presented by ctcherry is perfectly correct, but I prefer to use request.fullpath instead of including the URI library in the code. Just call request.fullpath in your views or controllers. But be careful, if you have any GET parameters in your URL it will be catched, in this case a use a split('?').first

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号