Frage

Was ich versuche, hier zu erreichen ist können sagen, dass wir zwei Beispiel-URLs haben:

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"
url2 = "http://www.example.com/"

Wie kann ich die Streifen nach unten URLs extrahieren?

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa"
url2 = "http://http://www.example.com"

URI.parse in Ruby saniert bestimmte Art von fehlerhafter URL aber unwirksam ist in diesem Fall.

Wenn wir verwenden regex dann /^(.*)\/$/ entfernt einen einzelnen Schrägstrich / von url1 und ist unwirksam für url2.

Ist jemand bewusst, wie diese Art von URL-Analyse zu behandeln?

Der Punkt hier ist, will ich nicht mein System http://www.example.com/ und http://www.example.com haben als zwei verschiedene URLs behandelt. Und Gleiches gilt für http://emy.dod.com/kaskaa/dkaiad/amaa//// und http://emy.dod.com/kaskaa/dkaiad/amaa/.

War es hilfreich?

Lösung

Wenn Sie nur alle Schrägstriche vom Ende des URL-String entfernen müssen, dann können Sie die folgende regex versuchen:

"http://emy.dod.com/kaskaa/dkaiad/amaa//////////".sub(/(\/)+$/,'')
"http://www.example.com/".sub(/(\/)+$/,'')

/(\/)+$/ - diese Regex findet ein oder mehr Schrägstriche am Ende der Zeichenfolge. Dann haben wir dieses Spiel mit leeren String ersetzen.

Hope, das hilft.

Andere Tipps

Obwohl dieses Themas ist ein wenig alt und die Top-Antwort ist ganz gut, aber ich schlage vor, einen anderen Weg, dies zu tun:

/^(.*?)\/$/

Sie könnten es in Aktion sehen hier: https://regex101.com/r/vC6yX1/2

Die Magie hier ist *?, die ein faules Spiel tut. So ist der gesamte Ausdruck übersetzt werden könnte, wie:

Spiel so wenige Zeichen wie möglich und es zu erfassen, während Match so viele Schrägstriche wie kann es am Ende.

Welche Mittel, in einem einfachen Englisch, entfernt alle Hinterschrägstriche.

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"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top