Comment peut-plusieurs barres obliques de suivi peuvent être retirés à partir d'une URL dans Ruby
-
03-10-2019 - |
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/
.
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"