Expresión regular para la ruta del archivo que no permite que los directorios padre

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

  •  12-09-2019
  •  | 
  •  

Pregunta

Estoy buscando para escribir una expresión regular para una ruta de archivo que debe comenzar con un poco de prefijo. En este caso se debe comenzar con '/ tank / home /'. También quiero para asegurarse de que no contiene '/ ..' -. sin saltar a los directorios padre

Me pasé un tiempo jugueteando sin llegar a nada del todo bien. Me instalados en el uso de dos expresiones regulares, la primera que debe coincidir con el segundo y que no debe coincidir:

'^/tank/home/'

'/\.\.(/.*)?$'

¿Esto hace lo que yo creo que sí? ¿Hay una manera más fácil?

Esto es en una escritura del golpe, por lo que vale la pena.

¿Fue útil?

Solución

Puede ampliar expresiones regulares de Dav para incluir una barra diagonal adicional:

^(?!.*/\.\./.*)/tank/home.*$

Pero ... una mejor opción podría ser la de asegurarse de que el resultado de la trayectoria es algo que comienza en / tank / home:

FILEPATH=$(readlink -f $YOURFILE)
[[ $FILEPATH =~ ^/tank/home/ ]] && echo "starts with /tank/home/"

Otros consejos

Se puede usar un búsqueda negativa hacia delante para asegurarse de que no hay ninguna /.. en la cadena:

^(?!.*/\.\..*)/tank/home.*$
'^/tank/home(?!.*/\.\.(/|$))/' 

partidos /tank/home/foo..bar pero no / tank / home / .. o / tank / home / foo bar /../

Se puede usar de búsqueda hacia atrás negativo también:

/ tank / home / ([^ /] |?! (

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top