Как добавить косую черту в случае необходимости с gsub - PullRequest
5 голосов
/ 13 августа 2010

Я пытаюсь добавить косую черту, если необходимо:

a = '/var/www'
a.gsub
...

Я не знаю, как это сделать.

Ответы [ 9 ]

22 голосов
/ 12 сентября 2012
a = File.join(a, "")

Быстро, просто и дает гарантию того, что a заканчивается разделителем пути; то есть он дает одинаковый результат, независимо от того, является ли a "/var/www" или "/var/www/".

Это то же самое, что и комментарий Джо Уайта выше; Я не знаю, почему он не представил его в качестве ответа, поскольку он заслуживает того, чтобы быть им.

Как ни странно, библиотека Pathname не предоставляет удобный способ сделать то же самое.

14 голосов
/ 31 января 2012

Вот немного более читаемая версия

path << '/' unless path.end_with?('/')
2 голосов
/ 13 августа 2010

Почему вы хотите использовать gsub ?

  1. Вы не делаете подстановку (ничего не нужно удалять из строки)
  2. Если вы заменяете, и вам нужно сделать это только в одном месте, используйте sub, а не gsub.
  3. Если вы заменяете и хотите изменитьиспользуйте строку sub! или gsub!.

Поскольку вы не делаете подстановку, просто добавьте косую черту, если необходимо:

path << '/' if path[-1] != '/' # Make sure path ends with a slash

Обновление Чтобы сделать его совместимым со старыми версиями Ruby (1.8.x), измените его немного:

path << '/' if path[-1].chr != '/' # Make sure path ends with a slash
0 голосов
/ 25 апреля 2019

Вы можете использовать .chomp('/'), чтобы убрать опционально завершающий /, а затем .concat('/'), чтобы снова добавить косую черту.

0 голосов
/ 01 июля 2015

Довольно простой gsub, который проще как один слой, чем конкатенация (<<) </p>

a = '/var/www'
a.gsub('/?$', '/')

Это просто находит необязательный символ / в конце строки и повтор

0 голосов
/ 13 августа 2010
"/var/www".gsub(/[^\/]$/, '\1/')  #=> "/var/www/"
"/var/www/".gsub(/[^\/]$/, '\1/') #=> "/var/www/"
0 голосов
/ 13 августа 2010

Есть несколько различных способов, которые уже были рассмотрены, чтобы перейти к другому:

(a << '/').gsub!('//','/')

или

(a << '/').squeeze('/')

Стоит отметить, однако, что оба из них преобразуют любые случаи '//' в '/' в любом месте строки, хотя, если вы просто имеете дело с путями, это вряд ли вызовет проблемы.

0 голосов
/ 13 августа 2010

Следующий скрипт показывает, как это можно сделать:

a="/var/www";
print a + "\n";
a = a.gsub(/([^\/]$)/, '\1/');
print a + "\n";
a = a.gsub(/([^\/]$)/, '\1/');
print a + "\n";

Это выводит:

/var/www
/var/www/
/var/www/

и работает путем замены последнего символа строки (если это не /) тем же символом плюс завершающий /.

0 голосов
/ 13 августа 2010

Это не очень красиво выглядит ... но работает:

t = "некоторый текст"

т [-1] == 47? t: t + "/"

47 - это код обратной косой черты

...