2

プレフィックスで始まる必要があるファイルパスの正規表現を作成しようとしています。この場合、「/ tank /home/」で始まる必要があります。また、「/..」が含まれていないことを確認したいと思います。親ディレクトリにジャンプすることはありません。

私は、まったく正しいことを思い付かずに、いじくり回してしばらく過ごしました。私は2つの正規表現を使用することに決めました。1つ目は一致する必要があり、2つ目は一致しない必要があります。

'^/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

ネガティブルックビハインドも使用できます。

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

于 2009-08-07T00:40:36.870 に答える