7

必要に応じて末尾のスラッシュを追加しようとしています:

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

やり方がわかりません。

4

8 に答える 8

25
a = File.join(a, "")

a迅速でシンプルで、パスセパレーターで終わることを保証する効果があります。つまり、 であっても であっても同じ結果が得aられ"/var/www"ます"/var/www/"

これは、上記の Joe White のコメントと同じです。なぜ彼がそれを回答として提出しなかったのか、私にはわかりません。

奇妙なことに、Pathname ライブラリは同じことを行う便利な方法を提供していません。

于 2012-09-12T17:48:42.430 に答える
14

これはもう少し読みやすいバージョンです

path << '/' unless path.end_with?('/')
于 2012-01-30T21:33:12.460 に答える
2

なぜgsubを使いたいのですか?

  1. 置換を行っていません(文字列から何も削除されません)
  2. 置換する場合で、1つの場所でのみ実行する必要がある場合は、subnotを使用してください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
于 2010-08-13T13:47:28.127 に答える
0

次のスクリプトは、これを行う方法を示しています。

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/

/行の最後の文字 ( でない場合) を同じ文字と末尾の文字で置き換えることによって機能し/ます。

于 2010-08-13T13:07:29.083 に答える
0

ミックスに別のものを介して、すでにカバーされているいくつかの異なる方法があります。

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

また

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

ただし、どちらも「//」を文字列のどこでも「/」に変換することに注意してください。ただし、パスのみを扱っている場合は、問題が発生する可能性はほとんどありません。

于 2010-08-13T13:58:24.340 に答える
0
"/var/www".gsub(/[^\/]$/, '\1/')  #=> "/var/www/"
"/var/www/".gsub(/[^\/]$/, '\1/') #=> "/var/www/"
于 2010-08-13T14:14:57.410 に答える
0

連結 (<<) よりもワンライナーの方が簡単な、非常に単純な gsub。

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

/これは単に文字列の末尾にあるオプションの文字を見つけて、

于 2015-07-01T20:26:54.493 に答える