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

正则表达式不匹配。_filename.php文件,php,regex,Php,Regex,MAC OSX创建一些不需要的点下划线文件来存储文件信息 目前,我的文件系统的一个目录中有两个文件-Test.php和\u Test.php 我需要编写一个preg_匹配,以便只接受第一个文件并忽略元数据文件。例如 preg_match('/^(.+)\.php$/', $fileName, $matches); 但是,这里,$matches为$fileName=Test.php和\u Test.php返回相同的输出 是否要修改正则表达式以忽略元数据文件并只接受Test.php?使用a断言字符

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

目前,我的文件系统的一个目录中有两个文件-
Test.php
\u Test.php

我需要编写一个preg_匹配,以便只接受第一个文件并忽略元数据文件。例如

preg_match('/^(.+)\.php$/', $fileName, $matches);
但是,这里,
$matches
为$fileName=
Test.php
\u Test.php
返回相同的输出

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

使用a断言字符串不以
开头。\u

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

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?
    }
}


请参见演示

谢谢您的回答。我只需要匹配
.php
文件,还需要不带扩展名的文件名出现在$matches[1]中,这与我的正则表达式有关。
preg_match('/^[^\.].*\.php$/', $fileName, $matches);