J’essaie de construire une expression régulière pour filtrer une URL.
J’ai besoin d’une expression régulière pour correspondre aux cas suivants:
http://proxy/www.test.com
Je veux que le résultat soit www.test.com
http://proxy/www.test.com/test
Je veux que le résultat soit www.test.com
http://proxy/test.org/test
Je veux que le résultat soit test.org
http://proxy/app.local-test:5555/test
Je veux que le résultat soit app.local-test: 5555
http://proxy/local-test:5555/test
Je veux que le résultat soit un test local: 5555
J’ai eu cette regex: (?<=proxy\/)(.*)(?=\/)
Qui filtre l’url correctement, mais dépend d’une seconde barre oblique. La deuxième barre oblique est facultative, donc ma regex ne fait pas l’affaire.
Vous devez remplacer la correspondance de points gourmande par une classe de caractères négative :
(?<=proxy\/)[^\/]+
Voir la démo
Le .*
Est "gourmand" (ce qui signifie qu’il peut correspondre à autant de caractères que le retour à la ligne) et vous avez tenté de restreindre la correspondance avec l’avance. En fait, une classe de caractères négative est plus sûre et plus efficace.
Le [^/]
signifie simplement n'importe quel caractère sauf un /
. Ainsi, vous pouvez omettre complètement le look-ahead.
Essayez ceci: (?<=proxy\/)([^\/]+)
J’aime utiliser des comparatifs négatifs à la fin des phrases
Vous pouvez essayer avec:
(?<=proxy\/)([^\s\/]+)