PHP正则表达式从URL获取文件名

时间:2014-01-21 21:06:03

标签: php regex

我对正则表达式不太好,但是如何将文件名与路径中的扩展名分开?

  

d:/DCIM/image10.jpg

     

d:/DCIM/image11.jpg

     

d:/DCIM/image12.jpg

     

d:/DCIM/image13.jpg

我会得到imagex.jpg彼此关于字符串,x是一个数字。

所以基本上搜索“.jpg”然后获取所有其他字符直到“/”。

修改 虽然知道如何用RegEx做这样的事情以备将来使用,但是路径信息功能可以完成这项任务。

3 个答案:

答案 0 :(得分:3)

从PHP手册:

您可以使用pathinfo功能

<?php

$path = pathinfo('D:/DCIM/image10.jpg');
echo $path['filename'];

?>

或者您可以使用basename函数来获取扩展名,而无需从pathinfo结果数组中捕获(文件名和扩展名):

<?php
echo basename('D:/DCIM/image10.jpg');
?>
祝你好运!

修改

如果你坚持,试试这个

<?php

$files = array(
    "D:/DCIM/image11.jpg",
    "C:\xampp\htdocs\index.php",
    "/usr/local/script.sh"
);

foreach ($files as $file) {
    preg_match("/[^\/|\\\]+$/", $file, $matches);
    var_dump($matches);   
}
?>



哪里

[^\/|\\\] 

表示您开始搜索斜杠,使用反斜杠转义斜杠字符

[^\/

或者您开始​​使用反斜杠搜索反斜杠转义反斜杠和括号字符。

|\\\]

最后,您在给定字符串的末尾搜索任何内容,至少一次。

+$  

我从这个post中采用了这个概念 我希望它有所帮助!

答案 1 :(得分:0)

正则表达式相当复杂,特别是对于这类任务,所以我不得不建议避免使用它们,因为这是不好的做法,除非你绝对不得不这样做。

最好的选择是使用爆炸的简单方法。

$parts = explode('/', $url);

现在$parts[count($parts) - 1]将包含文件名。

或使用pathinfo

$filename = pathinfo($url, PATHINFO_FILENAME);

现在$filename包含文件名。

话虽如此,如果您知道完整路径,则可以使用str_replace甚至substr。所有选项都有点混乱,但它们比正则表达式更好。

答案 2 :(得分:0)

如果您想使用RegEx,请将preg_match_all[^/]+\b$一起使用。我会把具体细节留给你。就个人而言,我会使用zerkms发布的pathinfo

此RegEx会查找一组为“/”的字符,并以字符串结尾开头。