使用glob()检查文件夹中包含模式的文件名


Check filename inside a folder contains a pattern using glob()

我需要检查文件夹中的文件是否包含'_'符号。我已经使用glob函数从服务器位置获取文件。但我没有意识到要检查文件名中的任何位置是否包含符号。我有一些文件的名称如下所示。student_178_grade1A

我已经这样做了。

$report_files=glob( '/user_uploads/'  . '/reportcards/' . 'term' . '_' . 10.'/*'.'.pdf' );
//this will return all files inside the folder.
if(count(report_files)>0)
 {
        //some stuff
 }
 else
 {
 }

我需要获取文件名中包含"_"的文件。我试过

glob( '/user_uploads/'  . '/reportcards/' . 'term' . '_' . 10.'/*[_]'.'.pdf' );

但它不工作

您的正则表达式似乎不正确。这可能会做你想做的事:

// Find any file in the directory "/user_uploads/reportcards/term_10/" 
// that has the file extension ".pdf"
$report_files = glob("'/user_uploads'/reportcards'/term'_10'/(.*)'.pdf");
// Find any file in the directory "/user_uploads/reportcards/term_10/" 
// containing the character "_".
$report_files = glob("'/user_uploads'/reportcards'/term'_10'/(.*)'_(.*)");
// Find any file in the directory "/user_uploads/reportcards/term_10/" 
// that has the file extension ".pdf" and contains the "_" character
$report_files = glob("'/user_uploads'/reportcards'/term'_10'/(.*)'_(.*)'.pdf");

如果你不完全理解正则表达式的作用,我在下面简要总结了一下正在做的事情。还有一个很棒的网站可以尝试常规表达,并提供如何在这里构建它们的文档。

'/ = escapes the / character
'_ = escapes the _ character
'. = escapes the . character
(.*) = matches any character, number etc

首先,您忘记了术语后的引号。

$report_files = glob('/user_uploads/'.'/reportcards/'.'term'.'_'.10.'/*[_]'.'.pdf');

其次,在user_uploads之后有两个斜杠。

$report_files = glob('/user_uploads/reportcards/'.'term'.'_'.10.'/*[_]'.'.pdf');