从S3 URL中提取存储桶和资源名称(正则表达式问题)

时间:2011-05-10 11:53:01

标签: php regex amazon-s3

我将收到以下任何一项的输入。我需要设计一个可以处理其中任何一个的正则表达式并提取validS3bucketname和validS3resourcename。

http://s3.amazonaws.com/validS3bucketname/validS3resourcename
https://s3.amazonaws.com/validS3bucketname/validS3resourcename
http://validS3bucketname.s3.amazonaws.com/validS3resourcename
https://validS3bucketname.s3.amazonaws.com/validS3resourcename

validS3bucketname和validS3resourcename是VALID S3值,包括空格等等 - 我不知道S3允许哪些作为有效文件名。

2 个答案:

答案 0 :(得分:4)

也许这些可以结合起来。把它作为灵感:

第一种情况:

^https?://s3\.amazonaws\.com\/([^/]+)/(.+)$

第二种情况:

^https?://([^/]+)\.s3\.amazonaws\.com\/(.+)$

答案 1 :(得分:1)

以下两者都匹配:

/:\/\/s3\.amazonaws.com\/([^\/]+)|:\/\/([^.]+)\.s3\.amazonaws\.com\//

这个简单的函数应该很好地包装它

function getS3Info($url) {
    if(! preg_match('/(?:\/\/s3\.amazonaws.com\/([^\/]+)|:\/\/([^.]+)\.s3\.amazonaws\.com)\/([^\/]+)/', $url, $a)) {
        return false;
    }

    $bucket = isset($a[2]) ? $a[2] : $a[1];
    $resource = $a[3];

    return array('bucket' => $bucket, 'resource' => $resource);
}