我想写一个正则表达式来表示一个文件路径,它必须以前缀开头。在这种情况下,它应该以“/tank/home/”开头。我还想确保它不包含“/..”--不跳到父目录。我花了一段时间来摸索,没有找到任何正确的方法。我决定使用两个正则表达式,第一个必须匹配,第二个必须不匹配:
'^/tank/home/' '/\.\.(/.*)?$'
这是不是和我想的一样?有没有更简单的方法?这是在一个bash脚本,无论它的价值。
bksxznpy1#
您可以扩展Dav的正则表达式,使其包含一个额外的尾部斜杠:
^(?!.*/\.\./.*)/tank/home.*$
但是...更好的选择可能是确保路径的结果是从/tank/home下开始的内容:
FILEPATH=$(readlink -f $YOURFILE) [[ $FILEPATH =~ ^/tank/home/ ]] && echo "starts with /tank/home/"
kupeojn62#
你可以使用一个负的lookahead来确保字符串中没有任何/..:
/..
^(?!.*/\.\..*)/tank/home.*$
vpfxa7rd3#
'^/tank/home(?!.*/\.\.(/|$))/'
匹配/tank/home/foo.. bar,但不匹配/tank/home/..或/tank/home/foo/../bar
utugiqy64#
您也可以使用负后视:
\/tank\/home\/([^\/]|?(<!\/\.\.)\/)+$
4条答案
按热度按时间bksxznpy1#
您可以扩展Dav的正则表达式,使其包含一个额外的尾部斜杠:
但是...更好的选择可能是确保路径的结果是从/tank/home下开始的内容:
kupeojn62#
你可以使用一个负的lookahead来确保字符串中没有任何
/..
:vpfxa7rd3#
匹配/tank/home/foo.. bar,但不匹配/tank/home/..或/tank/home/foo/../bar
utugiqy64#
您也可以使用负后视: