MAC OSX会创建一些不需要的点下划线文件来存储文件信息。
我的文件系统目录中当前有两个文件 - Test.php
和._Test.php
。
我需要编写一个preg_match来接受第一个文件并忽略元数据文件。例如。
preg_match('/^(.+)\.php$/', $fileName, $matches);
但是,此处$matches
会为$ fileName = Test.php
和._Test.php
返回相同的输出。
是否有修改正则表达式以忽略元数据文件并仅接受Test.php
?
答案 0 :(得分:2)
使用negative lookahead断言字符串不以._
开头:
^(?!\._)(.+)\.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?
}
}
结果
有效文件:测试
文件无效
有效文件:.Testing
有效文件:_Testing2
文件无效
答案 1 :(得分:0)
preg_match('/^[^\.].*\.php$/', $fileName, $matches);