使用正则表达式排除文件

时间:2014-06-03 06:18:19

标签: php regex preg-match regex-negation

我想要排除所有.mp3.jpeg个文件(使用正则表达式,不是 PHP)。我知道!preg_match

下面的示例总是匹配:

$str = 'file.mp3'; // Exclude
$ex  = '~(?!\.(mp3|jpe?g))$~';

if (preg_match($ex, $str)) {
    echo "Match!";
} else {
    echo "Nothing Match!";
}

1 个答案:

答案 0 :(得分:2)

你的负面前瞻是行不通的,因为没有什么值得期待的。请记住,环绕声断言是零宽度 - 它们实际上并不消耗字符。您仍然需要考虑文件扩展名字符。

更改表达式如下:

$ex = '~(?!\.(mp3|jpe?g))[a-z]{3,4}$~';

Demo


更好的方法是使用pathinfo()。维护一系列您想要禁止的扩展,然后使用in_array()检查文件名的扩展名 该数组:

$disallowed = ['mp3', 'jpg', 'jpeg', /* more extensions */ ];

if (in_array(pathinfo($str, PATHINFO_EXTENSION), $disallowed)) {
    # code...
}