Comment peut-plusieurs barres obliques de suivi peuvent être retirés à partir d'une URL dans Ruby

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

Question

Ce que je suis en train de réaliser est ici permet de dire que nous avons deux exemples d'URL:

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

Comment puis-je extraire les URL rayées vers le bas?

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

URI.parse dans certains type d'URL malformée mais est inefficace dans ce cas de Ruby.

Si nous utilisons regex /^(.*)\/$/ puis supprime une seule / slash de url1 et est inefficace pour url2.

Quelqu'un est-il au courant de la façon de gérer ce type d'analyse syntaxique URL?

Le point ici est que je ne veux pas que mon système d'avoir http://www.example.com/ et http://www.example.com traités comme deux URL différentes. Et même pour http://emy.dod.com/kaskaa/dkaiad/amaa//// et http://emy.dod.com/kaskaa/dkaiad/amaa/.

Était-ce utile?

La solution

Si vous avez juste besoin de supprimer toutes les barres obliques de la fin de la chaîne URL alors vous pouvez essayer le regex suivant:

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

/(\/)+$/ - ce regex trouve une ou plusieurs barres obliques à la fin de la chaîne. Ensuite, nous remplaçons ce match avec une chaîne vide.

Hope this helps.

Autres conseils

Bien que ce fil est un peu vieux et la réponse de haut est assez bonne, mais je suggère une autre façon de le faire:

/^(.*?)\/$/

Vous pourriez le voir en action ici: https://regex101.com/r/vC6yX1/2

La magie est ici *?, qui fait un match paresseux. Ainsi, pourrait se traduire par l'expression entière comme:

match que quelques caractères qu'il peut et le capturer, tout en Obtiens autant que possible des barres obliques à la fin.

Ce qui signifie, dans un anglais plus clair, supprime toutes les barres obliques de fin.

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"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top