Tengo una URL y estoy tratando de hacerla coincidir con una expresión regular para extraer algunos grupos. El problema que tengo es que la URL puede terminar o continuar con una "/" y más texto de URL. Me gustaría hacer coincidir URL como esta:
- http: // servidor / xyz / 2008-10-08-4
- http: // servidor / xyz / 2008-10-08-4 /
- http: // server / xyz / 2008-10-08-4 / 123 / más
Pero no coincide con algo como esto:
Entonces, pensé que mi mejor apuesta era algo como esto:
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]
donde la clase de carácter al final contenía el "/" o el final de la línea. Sin embargo, la clase de personaje no parece estar contenta con el "$" allí. ¿Cuál es la mejor forma de discriminar entre estas URL y, al mismo tiempo, retirar los grupos correctos?
Ahora tiene un par de expresiones regulares que harán lo que quiera, por lo que está cubierto adecuadamente.
Lo que no se ha mencionado es por eso que su intento no funcionará: Dentro de una clase de caracteres,
$
(así como^
,.
y/
) no tiene ningún significado especial, por lo[/$]
partidos, ya sea un literal/
o una literales$
en lugar de terminar la expresión regular (/
) o coincidente fin de línea ($
).fuente
En Ruby y Bash, puede usar
$
entre paréntesis./(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)
(Esta solución es similar a la de Pete Boughton, pero conserva el uso de
$
, que significa final de línea, en lugar de usar\z
, que significa final de cadena).fuente
$
que no pueda usarse entre paréntesis()
en ninguna implementación en realidad. Son los corchetes los[]
que lo hacen literal.$
funciona de esta manera en javascript, mientras\z
que no (Chrome 48, Firefox 43, IE9).