#ruby #string
#ruby #строка
Вопрос:
У меня есть следующие строки:
src = "dav://w.lvh.me:3000/Home/Transit/file"
host = "w.lvh.me:3000"
Что я хочу получить, так это "/Home/Transit/file"
использовать эти две строки
Я думал выполнить поиск host
в src
и удалить его при первом его появлении и все, что было до него, но я не уверен точно, как это сделать. Или, может быть, есть способ получше?
Буду признателен за любую помощь!
Ответ №1:
Действительно, есть способ получше:
require 'uri'
src = "dav://w.lvh.me:3000/Home/Transit/file"
src = URI.parse src
src.path # => "/Home/Transit/file"
Когда в строке есть пробелы, вы должны пройти дополнительный шаг экранирования / отмены экранирования. К счастью, это просто:
require 'uri'
src = "dav://w.lvh.me:3000/Home/Transit/Folder 144/webdav_put_request"
src = URI.parse(URL.escape src)
URL.unescape(src.path) # => "/Home/Transit/Folder 144/webdav_put_request"
Комментарии:
1. Идеальный ответ. Не все должно сводиться к регулярному выражению. Вам нужен анализатор URI для разбора URI, а не очередное неисправное регулярное выражение.
2. я забыл спросить, что, если в
src
есть пробелы ? URI.parse выдает ошибку, например, еслиsrc = "dav://w.lvh.me:3000/Home/Transit/Folder 144/webdav_put_request"
3. Спасибо. Я попытался выполнить экранирование с помощью пользовательской функции, но я думаю, что это не сработало правильно. URI.escape работает нормально!
Ответ №2:
Это должно выполнить задание:
src = "dav://w.lvh.me:3000/Home/Transit/file"
host = "w.lvh.me:3000"
result = src.sub(/.*#{host}/, '')
#=> "/Home/Transit/file"