RubyのURLから複数のトレーリングスラッシュを削除するにはどうすればよいですか
-
03-10-2019 - |
質問
ここで達成しようとしているのは、2つのURLの例があるとしましょう。
url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"
url2 = "http://www.example.com/"
ストライプダウンURLを抽出するにはどうすればよいですか?
url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa"
url2 = "http://http://www.example.com"
URI.parse
Rubyでは、特定のタイプの奇形のURLを消毒しますが、この場合は効果がありません。
Regexを使用する場合 /^(.*)\/$/
単一のスラッシュを削除します /
から url1
そして、効果がありません url2
.
このタイプのURL解析を処理する方法を誰かが知っていますか?
ここでのポイントは、私が私のシステムを持ちたくないということです http://www.example.com/
と http://www.example.com
2つの異なるURLとして扱われています。そして同じことが当てはまります http://emy.dod.com/kaskaa/dkaiad/amaa////
と http://emy.dod.com/kaskaa/dkaiad/amaa/
.
解決
URL文字列の端からすべてのスラッシュを削除する必要がある場合は、次の正規表現を試すことができます。
"http://emy.dod.com/kaskaa/dkaiad/amaa//////////".sub(/(\/)+$/,'')
"http://www.example.com/".sub(/(\/)+$/,'')
/(\/)+$/
- この正規表現は、文字列の最後に1つ以上のスラッシュを見つけます。次に、この一致を空の文字列に置き換えます。
お役に立てれば。
他のヒント
このスレッドは少し古く、一番の答えは非常に良いですが、これを行う別の方法を提案します。
/^(.*?)\/$/
ここで動作しているのを見ることができました: https://regex101.com/r/vc6yx1/2
ここの魔法はです *?
, 、怠zyな試合を行います。したがって、表現全体を次のように翻訳できます。
できるだけ少ない文字を一致させてキャプチャしますが、最後にできるだけ多くのスラッシュを一致させます。
つまり、より単純な英語では、すべての後続のスラッシュを削除します。
def without_trailing_slash path
path[ %r(.*[^/]) ]
end
path = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"
puts without_trailing_slash path # "http://emy.dod.com/kaskaa/dkaiad/amaa"