如何使用java使用正则表达式从aws s3虚拟路径uri提取区域信息?
我需要从基于s3虚拟路径uri中提取区域信息,如下所示。 https://.s3...com/ 我的目的是从S3URI获取区域名称,并在使用aws java sdk 2.x创建s3client时提供区域 有人能帮我使用正则表达式吗?试试这个:如何使用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
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部分之间进行匹配。你可以在这里测试