如何使用java使用正则表达式从aws s3虚拟路径uri提取区域信息?

如何使用java使用正则表达式从aws s3虚拟路径uri提取区域信息?,java,regex,amazon-web-services,amazon-s3,sdk,Java,Regex,Amazon Web Services,Amazon S3,Sdk,我需要从基于s3虚拟路径uri中提取区域信息,如下所示。 https://.s3...com/ 我的目的是从S3URI获取区域名称,并在使用aws java sdk 2.x创建s3client时提供区域 有人能帮我使用正则表达式吗?试试这个: public class RegexTest { public static void main(String[] args) { String url = "https://mybucket.s3.us-west-1.c

我需要从基于s3虚拟路径uri中提取区域信息,如下所示。 https://.s3...com/

我的目的是从S3URI获取区域名称,并在使用aws java sdk 2.x创建s3client时提供区域

有人能帮我使用正则表达式吗?

试试这个:

public class RegexTest {
    public static void main(String[] args) {
        String url = "https://mybucket.s3.us-west-1.com/";

        Pattern p = Pattern.compile("https:\\/\\/.*\\.s3\\.(.*)\\.com");

        Matcher matcher = p.matcher(url);

        if(matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
}

matcher.group(0)
将为您提供整个匹配项(本例中为完整URL)。调用
matcher.group(1)
将获得第一个匹配的组,即封装在
()

中的正则表达式的第一部分。如果java代码在创建s3存储桶的同一区域上运行,则可以使用环境变量AWS_region代替。我的情况是,我不希望用户明确提及该地区,应该由程序自己提取。谢谢您的回复。我更改了“https:\/\\/.\\\.s3\\.(.*)\.(.*)”使其有点通用。非常感谢againI希望匹配类似*.com的字符串,即在区域之后可以有多个子域。你能给我一些建议吗?也许你可以用像这样的
https:\\/\\/.\\\\\\\\.s3\.([^.]*)\.?(.*)\\.com
。第一组将捕获每个没有点字符的字符串,第二组将在第一组和.com部分之间进行匹配。你可以在这里测试