我用datepicker创建了一个搜索框,我的文件夹结构像data2/mysqldump/050516
,在这个文件夹中我有名为:phpdev11_test1.sql.bz2
的文件。我只想搜索名为"phpdev11_"
、全名为"phpdev11_test1"
的文件。我的代码是
$dir = $_SERVER['DOCUMENT_ROOT'].'/data2/mysqldump/';
$directory = new RecursiveDirectoryIterator($dir);
$flattened = new RecursiveIteratorIterator($directory);
$files = new RegexIterator($flattened, '#^(?:[A-Z]:)?(?:/(?!'.Trash)[^/]+)+/[^/]+'.(?:sql|bz2)$#Di');
foreach($files as $file) {
echo $file . PHP_EOL;
}
下面的代码适用于我,我已将您的正则表达式更改为:
^(?:[A-Z]:)?(?:/(?!.Trash)[^/]+)+/'.$fullName.'.(?:sql).(?:bz2)$#i
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;
}
目录结构:
数据2/└──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└── .废物└──phpdev11_test1.sql.bz2
输出:
#^(?:[A-Z]:)?(?:/(?!''.Trash)[^/]+)+/phpdev11_test1''.(?:sql)''.(?:bz2)$#i/var/www/apps/misc/phptut/trash/php/data2/mysqldump/05517/phpdev11_test1.sql.bz2/var/www/apps/misc/phptut/trash/php/data2/mysqldump/05516/phpdev11_test1.sql.bz2