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

时间:2013-06-05 12:48:10

标签: php regex

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

例如,我有这个字符串:

/path/to/file/name.jpg

我想匹配此字符串的两个部分只有一个正则表达式,因此我可以使用“/ path / to / file /”(除了url的最后一部分之外的所有部分)和“name.jpg”。有可能吗?

编辑:我知道有其他方法可以使用PHP函数执行此操作,但我需要使用Regex进行此操作!

4 个答案:

答案 0 :(得分:4)

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

即使有pathinfo() dirname()basename()等特定功能

答案 1 :(得分:1)

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

$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];

答案 2 :(得分:1)

使用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
)

答案 3 :(得分:1)

当然有可能:

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

phpfiddle example