2013-06-05 42 views
2

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

例如,我有这个字符串:

/path/to/file/name.jpg

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

编辑:我知道还有其他的方式来使用PHP函数,但我需要用正则表达式来完成!

回答

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

即使有像pathinfo()dirname()basename()

+0

它的工作。谢谢! – vitorsdcs

+0

+1我认为我们在房子里还有另一个正则表达大师! – ridgerunner

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]; 
+0

对不起,我标记它作为PHP,但我真的需要用正则表达式来做到这一点,因为我实际上会在.htaccess文件中使用类似的代码。 – vitorsdcs

+0

好吧,目前正在准备正则表达式的例子。给我一分钟 – hek2mgl

+1

那么你想写一个mod_rewrite规则?如果是这样,请提出另一个问题并删除这个问题。 –

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 
) 
+0

嘿,男士谢谢,我知道我可以用PHP的另一种方式做到这一点,但我真的需要与正则表达式。 – vitorsdcs

1

特定的功能当然这是可能的:

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

phpfiddle example

+1

其有趣的如何每个人都想炫耀自己的正则表达式技能;)爱的命名组功能+1 – MarZab

+0

@MarZab每个人都试图帮助:) – Teneff

相关问题