我对正则表达式不太好,但是如何将文件名与路径中的扩展名分开?
d:/DCIM/image10.jpg
d:/DCIM/image11.jpg
d:/DCIM/image12.jpg
d:/DCIM/image13.jpg
我会得到imagex.jpg彼此关于字符串,x是一个数字。
所以基本上搜索“.jpg”然后获取所有其他字符直到“/”。
修改 虽然知道如何用RegEx做这样的事情以备将来使用,但是路径信息功能可以完成这项任务。
答案 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会查找一组不为“/”的字符,并以字符串结尾开头。