Ruby регулярное выражение: захватить путь URL - PullRequest
11 голосов
/ 26 февраля 2011

Из любого URL я хочу извлечь его путь.

Например:

URL: https://stackoverflow.com/questions/ask Путь: вопросы / вопросы

Это не должно быть сложно:

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

Но я думаю, что использую неправильный шаблон для 'игнорировать это' ('?:' - не работает) Какой правильный путь?

Ответы [ 3 ]

24 голосов
/ 26 февраля 2011

Я бы посоветовал вам не делать это с регулярным выражением, а вместо этого использовать встроенный URI lib:

require 'uri'

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

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

С косой чертой, но с этим легко справиться =)

3 голосов
/ 27 февраля 2011

В этом случае вы можете использовать регулярное выражение, которое быстрее 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показал, более читабельно.

0 голосов
/ 27 февраля 2011

Подход, представленный ctcherry, совершенно корректен, но я предпочитаю использовать request.fullpath вместо включения библиотеки URI в код. Просто позвоните request.fullpath в ваших представлениях или контроллерах. Но будьте осторожны, если у вас есть какие-либо параметры GET в вашем URL, он будет перехвачен, в этом случае используйте split('?').first

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...