正则表达式从文件名中删除多媒体扩展

问题描述 投票:0回答:3

我想使用

preg_replace()
从文件名中删除所有多媒体文件扩展名。

要删除的文件扩展名:

  • .m4a
  • .wav
  • .ogg
  • .flac
  • .avi
  • .flv
  • .mov
  • .m3u
  • .中
  • .webm
  • .mkv
  • .asf
  • .mpg
  • .mpeg
  • .mp(INT)
  • .mpg(国际)
  • .mpeg(国际)
  • .aif
  • .aiff
  • .3gp
  • .3gpp
  • .wma
  • .wmv

我的编码尝试:

$filename = 'bla.mp3 bla bla.mid.mp3.mp4.mid.mp10.mpeg.mpg.mpg10';
echo preg_replace('/[\.(m4a|wav|ogg|flac|avi|flv|mov|m3u|mid|webm|mkv|asf|wm(a|v)|mp(\d+)|aif(?:f?)|3gp(?:p?))]*$/', '', $filename);
php preg-replace strip file-extension sanitization
3个回答
0
投票

试试这个

$filename = 'bla.mp3 bla bla.mid.mp3.mp4.mid.mp10.mpeg.mpg.mpg10';
echo preg_replace('/\.(m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|mp(\d+)|aif(?:f?)|3gp(?:p?)|mp(eg(\d+)?|g(\d+)?))/g', '', $filename);

你可以在这里查看


编辑

echo preg_replace('/\.(m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|mp(\d+)|aif(?:f?)|3gp(?:p?)|mpe?g\d*)/g', '', $filename);

你可以在这里查看


最终编辑

删除处理

mp(\d+)
和处理
mpe?g\d*
并且只使用
mp(e?g)?\d*
来处理这两种情况,这是最简单的 - 在我看来 -

echo preg_replace('/\.(m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|aif(?:f?)|3gp(?:p?)|mp(e?g)?\d*)/g', '', $filename);

你可以在这里查看

作者编辑

这是它的简化形式

echo preg_replace('/\.a(if(?:f?)|sf|vi)|fl(ac|v)|m(3u|4a|id|kv|ov|(p(e?g)?\d*))|ogg|‌​w(av|ebm|m(a|v))/g', '', $filename);

0
投票

试试这个:

<?php
$filename = 'bla.mp3 bla bla.mid .mp3 .mp4 .mid .mp10 .mpeg .mpg .mpg10';
echo preg_replace('/\.(m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|mp\d|aif(?:f?)|3gp(?:p?))*/', '', $filename);
?>

更新:

echo preg_replace('/\.(mpg10|mpeg|mpg|m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|mp\d|aif(?:f?)|3gp(?:p?))*/', '', $filename);

0
投票

这里是按前导字母分组并压缩的所需模式逻辑。

使用

x
模式修饰符忽略模式中的空格——这允许将可运行模式写在多行上以便于人类阅读。

模式:(Regex101 演示

#
\.
(
  3gpp?
  |a(vi|sf|iff?)
  |fl(ac|v)
  |m(4a|ov|3u|id|kv|p\d+|pg\d*|peg\d*)
  |ogg 
  |w(av|ebm|m[av])
)
#xi

您尝试的模式中最外面的方括号使所有内部字符成为“字符类”的成员——它们被视为一个单独的文字字符列表。

© www.soinside.com 2019 - 2024. All rights reserved.