Expresión regular para la ruta del archivo que no permite que los directorios padre
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.
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 / ([^ /] |?! (