krn
krn

Reputation: 6815

Ruby regexp: capture the path of url

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' ('?:' - doesn't work). What is the right way?

Upvotes: 16

Views: 8864

Answers (2)

Chris Cherry
Chris Cherry

Reputation: 28574

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 =)

Upvotes: 36

Guilherme Bernal
Guilherme Bernal

Reputation: 8313

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.

Upvotes: 3

Related Questions