RubyのURLから複数のトレーリングスラッシュを削除するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/2765483

質問

ここで達成しようとしているのは、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"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top