Регулярное выражение для пути к файлу, которое не допускает родительские каталоги - PullRequest
1 голос
/ 07 августа 2009

Я хочу написать регулярное выражение для пути к файлу, который должен начинаться с некоторого префикса. В этом случае он должен начинаться с '/ tank / home /'. Я также хочу убедиться, что он не содержит «/ ..» - нет перехода в родительские каталоги.

Я потратил немного времени, не придумав ничего совершенно правильного. Я остановился на использовании двух регулярных выражений, первое из которых должно совпадать, а второе не должно совпадать:

'^/tank/home/'

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

Это делает то, что я думаю, что делает? Есть ли более простой способ?

Это в скрипте bash, для чего оно стоит.

Ответы [ 4 ]

4 голосов
/ 07 августа 2009

Вы можете расширить регулярное выражение Дэва, добавив дополнительную косую черту:

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

Но ... лучшим вариантом может быть проверка того, что результатом пути является то, что начинается в / tank / home:

FILEPATH=$(readlink -f $YOURFILE)
[[ $FILEPATH =~ ^/tank/home/ ]] && echo "starts with /tank/home/"
1 голос
/ 07 августа 2009
'^/tank/home(?!.*/\.\.(/|$))/' 

соответствует /tank/home/foo..bar но не / tank / home / .. или /tank/home/foo/../bar

1 голос
/ 07 августа 2009

Вы можете использовать отрицательный взгляд, чтобы убедиться, что в строке нет /..:

^(?!.*/\.\..*)/tank/home.*$
0 голосов
/ 07 августа 2009

Вы также можете использовать отрицательный взгляд:

/ бак / дом / ([^ /] |?! (</ ..) /) + $ </p>

...