2

我正在为必须以某个前缀开头的文件路径编写正则表达式。在这种情况下,它应该以“/tank/home/”开头。我还想确保它不包含“/..”——不跳转到父目录。

我花了一段时间摆弄,没有想出任何正确的东西。我决定使用两个正则表达式,第一个必须匹配,第二个不能匹配:

'^/tank/home/'

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

这和我想的一样吗?有没有更简单的方法?

这是一个 bash 脚本,值得。

4

4 回答 4

4

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

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

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

FILEPATH=$(readlink -f $YOURFILE)
[[ $FILEPATH =~ ^/tank/home/ ]] && echo "starts with /tank/home/"
于 2009-08-07T00:41:38.853 回答
1

您可以使用否定的前瞻来确保/..字符串中没有任何内容:

^(?!.*/\.\..*)/tank/home.*$
于 2009-08-07T00:20:33.527 回答
1
'^/tank/home(?!.*/\.\.(/|$))/' 

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

于 2009-08-07T01:01:45.270 回答
0

你也可以使用负面的lookbehind:

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

于 2009-08-07T00:40:36.870 回答