ファイル(Unix形式)のための絶対パスを考えると、それを簡素化します。換言すれば、正規のパスに変換します。
UNIX形式のファイルシステム、期間中。現在のディレクトリを指します。さらに、二重の期間は...レベルアップしたディレクトリに移動します。詳細については、以下を参照してください。LINUX / UNIXでの相対パスVS絶対パスを
返された正規のパスは常に/スラッシュで始まらなければならず、2つのディレクトリ名の間のみ、単一のスラッシュ/がなければならないことに注意してください。最後のディレクトリ名は(存在する場合)、末尾の/で終わっていなければなりません。また、正規のパスは、絶対パスを表す最短の文字列でなければなりません。
例1:
入力:「/ホーム/」
出力:「/ホーム」
説明:ノート末尾のスラッシュが最後のディレクトリ名の後には存在しないこと。
例2:
入力:「/ ... /」
出力:「/」
説明:ルートレベルは、あなたが行くことができる最高レベルであるように、rootディレクトリから1つ上のレベルに行くには、何もしません。
例3:
入力:「/ホーム// fooの/」
出力:「/ホーム/ foo」という
説明:正規のパスでは、複数の連続するスラッシュは単一のものに置き換えられています。
例4:
入力:「/a/./b/.../.../c/」
出力:「/ C」
実施例5:
入力:「/a/.../.../b/.../c//.//」
出力:「/ C」
実施例6:
入力:「/a//b////c/d//././/...」
出力:「/ A / B / C」
func simplifyPath(path string) string {
reg, _ := regexp.Compile("/+")
dirs := reg.Split(path, -1)
res := []string{}
for _, v := range dirs {
p := string(v)
if p == ".." {
if len(res) > 0 {
res = res[:len(res)-1]
}
} else if p != "." && p != "" {
res = append(res, p)
}
}
str := strings.Join(res, "/")
return "/" + str
}