将两个正则表达式组合成一个,匹配URL的第一部分和最后一部分


Combine two regular expressions into one, matching first and last part of URL?

如何组合两个正则表达式?

例如,我有这样一个字符串:

/道路//文件/name.jpg

我想用一个正则表达式匹配这个字符串的两个部分,这样我就可以有"/path/to/file/"(除了url的最后一部分)和"name.jpg"。这可能吗?

编辑:我知道还有其他方法使用PHP函数做到这一点,但我需要用Regex!

if (preg_match('#^(.*?/)([^/]+)$#', $path, $matches))
{
    list($all, $directory, $filename) = $matches;
}

即使有特定的功能,如pathinfo()dirname()basename()

使用pathinfo():

$foo = '/path/to/file/name.jpg';
$bits = pathinfo($foo);
print_r($bits);

这将给你:

Array
(
    [dirname] => /path/to/file
    [basename] => name.jpg
    [extension] => jpg
    [filename] => name
)

当然有可能:

/^(?P<path>.*?)(?P<filename>[^'/]*)$/

phpfiddle示例

在这种特殊情况下,我根本不会使用正则表达式。用途:

$path = dirname('/path/to/file/name.jpg');       // /path/to/file
$filename = basename('/path/to/file/name.jpg');  // name.jpg

如果你需要一个正则表达式,使用如下:

$str = 'path/to/file/name.jpg';
$pattern = '~(.*)(/.*)~';
preg_match($pattern, $str, $matches);
$path = $matches[1];
$filename = $matches[2];