Эта строка выглядит так, как будто это не строка, а URI. Итак, давайте рассматривать его как один:
require 'uri'
uri = URI.parse(str)
Теперь, извлекая компонент путь URI кусок пирога:
path = uri.path
Сейчас мы уже сильно ограничено количество вещей, которые могут пойти неправильно с нашим собственным анализом. Единственная часть URI, с которой нам все еще приходится иметь дело, - это компонент пути.
Regexp
, который соответствует той части, которую интересует выглядит следующим образом:
%r|/to/\w+/(.*/)t$|i
Если мы все это вместе, мы в конечном итоге с чем-то вроде этого:
require 'uri'
def URI.extract(uri)
return parse(uri).path[%r|/to/\w+/(.*/)t$|i, 1]
end
require 'test/unit'
class TestUriExtract < Test::Unit::TestCase
def test_that_the_path_gets_extracted_correctly
uri = 'http://linkto.com/to/1pyTZl/somesite.com/2009/10/monit-on-ubuntu/t'
path = 'somesite.com/2009/10/monit-on-ubuntu/'
assert_equal path, URI.extract(uri)
end
end
поддерживается для использования ответных действий. – akuhn