92 votes

Regex pour correspondre à l'url de fin de ligne ou le caractère "/"

J'ai une url et je suis en train de le faire correspondre à une expression régulière pour sortir certains groupes. Le problème que je vais avoir, c'est que l'url peut soit fin ou continuer avec un "/" et plus de texte url. J'aimerais correspondre les url comme ceci:

Mais ne pas correspondre à quelque chose comme ceci:

Donc, j'ai pensé que mon meilleur pari était quelque chose comme ceci:

/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]

d'où le caractère de classe à la fin contenait les "/" ou la fin-de-ligne. Le caractère de classe ne semble pas être heureux avec le "$" là que. Comment puis-je mieux discriminer entre ces urls, tout en tirant en arrière le bon groupe?

134voto

Peter Boughton Points 49510

Pour correspondre / ou à la fin de contenu, utilisez (/|\z)

Ceci s'applique uniquement si vous n'êtes pas en utilisant le multi-ligne correspondant (c'est à dire que vous êtes correspondant à une URL unique, pas un retour à la ligne délimitée par liste d'Url).


Que mettre avec une version mise à jour de ce qu'on avait:

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|\z)

Notez que j'ai changé le départ pour être un non-gourmand match pour non-blanc ( \S+? ) plutôt que d'assortir tout et n'importe quoi ( .* )

68voto

Dave Sherohman Points 25122

Vous avez un couple regexes maintenant, qui va faire ce que vous voulez, de sorte que c'est suffisamment couvert. Ce qui n'a pas été mentionné, c'est pourquoi votre tentative ne fonctionne pas: à l'Intérieur d'une classe de caractères, $ (ainsi que ^, ., et /) n'a pas de signification particulière, de sorte [/$] correspond à un littéral / ou un littéral $ plutôt que terminer les regex (/) ou comparer les fin-de-ligne ($).

49voto

Adam Tegen Points 8563
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$

21voto

Sparhawk Points 163

Dans le Rubis et le Bash, vous pouvez utiliser $ à l'intérieur des parenthèses.

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)

(Cette solution est similaire à Pete Boughton, mais conserve l'usage de l' $, ce qui signifie la fin de la ligne, plutôt que d'utiliser \z, ce qui signifie la fin de la chaîne.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X