我正在寻找一个必须以某个前缀开头的文件路径的正则表达式。在这种情况下,它应该以'/ tank / home /'开头。我还想确保它不包含'/ ..' - 没有跳到父目录。
我花了一些时间摆弄,没有提出任何正确的事情。我决定使用两个正则表达式,第一个必须匹配,第二个必须匹配:
'^/tank/home/'
'/\.\.(/.*)?$'
这是否符合我的想法?有更简单的方法吗?
这是一个bash脚本,它的价值。
答案 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)
您也可以使用负面观察:
/罐/家庭/([^ /] |(小于?!/ ..)/)+ $