我正在为必须以某个前缀开头的文件路径编写正则表达式。在这种情况下,它应该以“/tank/home/”开头。我还想确保它不包含“/..”——不跳转到父目录。
我花了一段时间摆弄,没有想出任何正确的东西。我决定使用两个正则表达式,第一个必须匹配,第二个不能匹配:
'^/tank/home/'
'/\.\.(/.*)?$'
这和我想的一样吗?有没有更简单的方法?
这是一个 bash 脚本,值得。
您可以扩展 Dav 的正则表达式以包含一个额外的斜杠:
^(?!.*/\.\./.*)/tank/home.*$
但是...更好的选择可能是确保路径的结果是在 /tank/home 下开始的:
FILEPATH=$(readlink -f $YOURFILE)
[[ $FILEPATH =~ ^/tank/home/ ]] && echo "starts with /tank/home/"
您可以使用否定的前瞻来确保/..
字符串中没有任何内容:
^(?!.*/\.\..*)/tank/home.*$
'^/tank/home(?!.*/\.\.(/|$))/'
匹配 /tank/home/foo..bar 但不匹配 /tank/home/.. 或 /tank/home/foo/../bar
你也可以使用负面的lookbehind:
/tank/home/([^/]|?(<!/..)/)+$