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

qjp7pelc  于 2022-11-26  发布在  其他
关注(0)|答案(4)|浏览(157)

我想写一个正则表达式来表示一个文件路径,它必须以前缀开头。在这种情况下,它应该以“/tank/home/”开头。我还想确保它不包含“/..”--不跳到父目录。
我花了一段时间来摸索,没有找到任何正确的方法。我决定使用两个正则表达式,第一个必须匹配,第二个必须不匹配:

'^/tank/home/'

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

这是不是和我想的一样?有没有更简单的方法?
这是在一个bash脚本,无论它的价值。

bksxznpy

bksxznpy1#

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

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

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

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

kupeojn62#

你可以使用一个负的lookahead来确保字符串中没有任何/..

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

vpfxa7rd3#

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

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

utugiqy6

utugiqy64#

您也可以使用负后视:

\/tank\/home\/([^\/]|?(<!\/\.\.)\/)+$

相关问题