我试图从文件夹级别搜索文件,但我遇到了一些问题

时间:2016-05-05 07:10:47

标签: php regex

我创建了一个带有datepicker的搜索框,我的文件夹结构如data2/mysqldump/050516,在这个文件夹中我有一个名称为phpdev11_test1.sql.bz2的文件我想搜索只有{{1}这样的名字的文件并且使用全名如"phpdev11_"我使用正则表达式,但它不像这个结果那样工作。我的代码是

"phpdev11_test1"

1 个答案:

答案 0 :(得分:0)

以下代码对我有用, 我已将你的正则表达式改为:

  ?

^(:[AZ]:)(?:?!/(垃圾箱)[^ /] +)+ /' $全名'(?: SQL)。。。。 (?:BZ2)$#我

error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);



$_SERVER['DOCUMENT_ROOT'] = __DIR__;

// $firstName = null;
// $lastName = null;
$firstName = 'phpdev11_';
$lastName = 'test1';

$defaultNamePattern = '[^/]+?';
if ($firstName) {
    $fullName = $firstName;
} else {
    $fullName = $defaultNamePattern;
}

if ($lastName) {
    $fullName .= $lastName;
} else {
    $fullName .= $defaultNamePattern;
}

$dir = $_SERVER['DOCUMENT_ROOT'].'/data2/mysqldump/';

$directory = new RecursiveDirectoryIterator($dir);
$flattened = new RecursiveIteratorIterator($directory);

$regex = '#^(?:[A-Z]:)?(?:/(?!\.Trash)[^/]+)+/'.$fullName.'\.(?:sql)\.(?:bz2)$#i';
$files = new RegexIterator($flattened, $regex);
echo $regex . "\n";

foreach($files as $file) {
    echo $file . PHP_EOL;
}

目录结构:

data2/
└── mysqldump
    ├── 050516
    │   ├── phpdev11_test1.sql.bz2
    │   ├── phpdev12_test1.sql.bz2
    │   ├── phpdev12_test2.sql.bz2
    │   └── test.txt
    ├── 050517
    │   ├── phpdev11_test1.sql.bz2
    │   └── phpdev12_test1.sql.bz2
    └── .Trash
        └── phpdev11_test1.sql.bz2

输出:

#^(?:[A-Z]:)?(?:/(?!\.Trash)[^/]+)+/phpdev11_test1\.(?:sql)\.(?:bz2)$#i
/var/www/apps/misc/phptut/trash/php/data2/mysqldump/050517/phpdev11_test1.sql.bz2
/var/www/apps/misc/phptut/trash/php/data2/mysqldump/050516/phpdev11_test1.sql.bz2