【发布时间】:2011-08-10 13:52:24
【问题描述】:
我有代表文件路径的字符串。像这样的东西。
folder1/folderA/file1.flv 文件夹2/文件夹B/file1.mp4 文件夹3/文件夹C/file1.jpg
我正在尝试编写一个基本上与有效扩展名列表匹配的表达式,例如.flv、.mp4、.flv
我确定我离这里很远,但这就是我所拥有的.[(\.flv/)|(\.wmv/)|(\.mp4)]
很滑稽,我敢肯定……但希望能说明要点。
【问题讨论】:
我有代表文件路径的字符串。像这样的东西。
folder1/folderA/file1.flv 文件夹2/文件夹B/file1.mp4 文件夹3/文件夹C/file1.jpg
我正在尝试编写一个基本上与有效扩展名列表匹配的表达式,例如.flv、.mp4、.flv
我确定我离这里很远,但这就是我所拥有的.[(\.flv/)|(\.wmv/)|(\.mp4)]
很滑稽,我敢肯定……但希望能说明要点。
【问题讨论】:
作为正则表达式的替代方法,您可以使用pathinfo(),它可以可靠地从路径中获取文件扩展名。
$allowed_extensions = array("flv", "mp4", "mpeg"); # note: all lowercase
$ext = pathinfo("/folder1/folderA/file1.flv", PATHINFO_EXTENSION);
# Search array of allowed extensions
if (in_array(strtolower($ext), $allowed_extensions))
echo "Okay";
else
echo "Fail";
【讨论】:
如果我的解释正确,你可能只想要这样的东西:
/[.](flv|mp4|wmv)$/
$ 确保它匹配字符串/文件名的末尾。替代方案列在括号中,[.] 只是\. 的更好表示法
【讨论】:
$str = "folder1/folderA/file1.jpg";
$found = preg_match("/[.]+(jpg|flv)$/", $str, $returns);
print_r ($returns);
【讨论】: