文件路径的正则表达式,不允许父目录

时间:2009-08-07 00:07:15

标签: regex bash filepath

我正在寻找一个必须以某个前缀开头的文件路径的正则表达式。在这种情况下,它应该以'/ tank / home /'开头。我还想确保它不包含'/ ..' - 没有跳到父目录。

我花了一些时间摆弄,没有提出任何正确的事情。我决定使用两个正则表达式,第一个必须匹配,第二个必须匹配:

'^/tank/home/'

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

这是否符合我的想法?有更简单的方法吗?

这是一个bash脚本,它的价值。

4 个答案:

答案 0 :(得分:4)

您可以扩展Dav的正则表达式以包含额外的尾部斜杠:

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

但是...更好的选择可能是确保路径的结果是在/ tank / home下开始的:

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

答案 1 :(得分:1)

您可以使用否定前瞻来确保字符串中没有/..

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

答案 2 :(得分:1)

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

匹配/tank/home/foo..bar但不匹配/ tank / home / ..或/ tank / home / foo /../ bar

答案 3 :(得分:0)

您也可以使用负面观察:

/罐/家庭/([^ /] |(小于?!/ ..)/)+ $