使用正则表达式从 aws s3 url 中提取存储桶名称

我想从 AWS s3 URL 中提取存储桶名称。


URL 可以有多种格式。以下是支持的 s3 URL 的正则表达式列表:


[a-z0-9.-]+\.s3\.amazonaws\.com

[a-z0-9.-]+\.s3-[a-z0-9-]+\.amazonaws\.com

[a-z0-9.-]+\.s3\.[a-z0-9-]+\.amazonaws\.com

[a-z0-9.-]+\.s3-website[.-](eu|ap|us|ca|sa|cn)

例子:


bucket-name.s3.us-west-2.amazonaws.com

bucket.name.s3.us-west-2.amazonaws.com

bucket-name.s3-us-west-2.amazonaws.com

bucket.name.s3-us-west-2.amazonaws.com

bucket-name.s3.amazonaws.com

bucket.name.s3.amazonaws.com

我想要一个可以bucket-name从GoLang.


智慧大石
浏览 189回答 2
2回答

HUX布斯

这会起作用:^(.+)(?:\.s3[-.].*)$翻译:从字符串的开头找到通向.s3.or的所有内容,.s3-并将其捕获到组 #1 中。您的存储桶名称将位于$1.请参阅下面的 regex101 链接并使用代码生成器查看 Golang 示例。https://regex101.com/r/LRvA5F/1

缥缈止盈

利用^(.*?)\.s3\b见证明。解释--------------------------------------------------------------------------------  ^                        the beginning of the string--------------------------------------------------------------------------------  (                        group and capture to \1:--------------------------------------------------------------------------------    .*?                      any character except \n (0 or more times                             (matching the least amount possible))--------------------------------------------------------------------------------  )                        end of \1--------------------------------------------------------------------------------  \.                       '.'--------------------------------------------------------------------------------  s3                       's3'--------------------------------------------------------------------------------  \b                       the boundary between a word char (\w) and                           something that is not a word char去代码示例:package mainimport (    "fmt"    "regexp")func main() {    r := regexp.MustCompile(`^(.*?)\.s3\b`)    str := "bucket-name.s3.us-west-2.amazonaws.com"    match := r.FindStringSubmatch(str)        fmt.Println(match[1])}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go