正则表达式与._filename.php文件不匹配

时间:2018-03-13 03:18:31

标签: php regex

MAC OSX会创建一些不需要的点下划线文件来存储文件信息。

我的文件系统目录中当前有两个文件 - Test.php._Test.php

我需要编写一个preg_match来接受第一个文件并忽略元数据文件。例如。

preg_match('/^(.+)\.php$/', $fileName, $matches);

但是,此处$matches会为$ fileName = Test.php._Test.php返回相同的输出。

是否有修改正则表达式以忽略元数据文件并仅接受Test.php

2 个答案:

答案 0 :(得分:2)

使用negative lookahead断言字符串不以._开头:

^(?!\._)(.+)\.php$

Demo

PHP示例

<?php
$tests[] = "Test.php";
$tests[] = "._Test.php";
$tests[] = ".Testing.php";
$tests[] = "_Testing2.php";
$tests[] = "._greajo.com";
$tests[] = "_.greajo.com";
foreach ($tests as $test) {
    if (preg_match("/^(?!\._)(.+)\.php$/i", $test, $m)) {
        echo "Valid file: ".$m[1].PHP_EOL;
    }
    else {
        echo "Invalid file".PHP_EOL; // discard?
    }
}

Demo

结果

  

有效文件:测试

     

文件无效

     

有效文件:.Testing

     

有效文件:_Testing2

     

文件无效

答案 1 :(得分:0)

preg_match('/^[^\.].*\.php$/', $fileName, $matches);

请参阅演示https://implode.io/evnXDC