```php
<?php

// V1

    /**
     * {@inheritDoc}
     */
    public function remove($filter, $path = null)
    {
        if (null == $path) {
            try {
                $this->storage->deleteMatchingObjects($this->bucket, $filter);
            } catch (\Exception $e) {
                $this->logError('The objects could not be deleted from Amazon S3.', array(
                    'filter'      => $filter,
                    'bucket'      => $this->bucket,
                    'exception'   => $e,
                ));
            }

            return;
        }

        $objectPath = $this->getObjectPath($path, $filter);
        if (!$this->objectExists($objectPath)) {
            return;
        }

        try {
            $this->storage->deleteObject(array(
                'Bucket' => $this->bucket,
                'Key'    => $objectPath,
            ));
        } catch (\Exception $e) {
            $this->logError('The object could not be deleted from Amazon S3.', array(
                'objectPath'  => $objectPath,
                'filter'      => $filter,
                'bucket'      => $this->bucket,
                'exception'   => $e,
            ));
        }
    }

// V2

    /**
     * {@inheritDoc}
     */
    public function remove(array $paths, array $filters)
    {
        if (empty($paths) && empty($filters)) {
            // or exception ???
            return;
        }

        if (empty($paths)) {
            try {
                $this->storage->deleteMatchingObjects($this->bucket, null, sprintf(
                    '/%s/i',
                    implode('|', $filters)
                ));
            } catch (\Exception $e) {
                $this->logError('The objects could not be deleted from Amazon S3.', array(
                    'filter'      => implode(', ', $filters),
                    'bucket'      => $this->bucket,
                    'exception'   => $e,
                ));
            }

            return;
        }

        foreach ($filters as $filter) {
            foreach ($paths as $path) {
                $objectPath = $this->getObjectPath($path, $filter);
                if (!$this->objectExists($objectPath)) {
                    return;
                }

                try {
                    $this->storage->deleteObject(array(
                        'Bucket' => $this->bucket,
                        'Key'    => $objectPath,
                    ));
                } catch (\Exception $e) {
                    $this->logError('The object could not be deleted from Amazon S3.', array(
                        'objectPath'  => $objectPath,
                        'filter'      => $filter,
                        'bucket'      => $this->bucket,
                        'exception'   => $e,
                    ));
                }
            }
        }
    }
```