我将收到以下任何一项的输入。我需要设计一个可以处理其中任何一个的正则表达式并提取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允许哪些作为有效文件名。
答案 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);
}