Har*_*rts 3 php regex directory glob file
如果我有一个目录,其中的文件列表如下所示:
Something_2015020820.txt
something_5294032944.txt.a
something_2015324234.txt
Something_2014435353.txt.a
Run Code Online (Sandbox Code Playgroud)
并且我想按最旧的日期(而不是文件名)获取文件排序列表,结果应该采用与 something_xxxxxxx.txt 匹配的任何内容。因此,不包括以“.a”结尾的任何内容。在这种情况下它应该返回
Something_2015020820.txt
something_2015324234.txt
Run Code Online (Sandbox Code Playgroud)
我做了一些谷歌搜索,似乎我可以使用 glob
$listOfFiles = glob($this->directory . DIRECTORY_SEPARATOR . $this->pattern . "*");
Run Code Online (Sandbox Code Playgroud)
但我不确定模式。
如果您可以同时提供区分大小写和不区分大小写的模式,那就太棒了。匹配模式必须是 something_number.txt
使用 glob 有点棘手。它确实支持一些有限的模式匹配。例如你可以做
glob("*.[tT][xX][tT]");
这将匹配file.txt
和file.TXT
,但它也将匹配file.tXt
和file.TXt
。不幸的是,无法指定类似file.(txt or TXT)
. 如果这不是问题,那就太好了!否则,您必须首先使用此方法至少缩小结果范围,然后再执行一些额外的处理。array_filter 和一些正则表达式也许。
更好的选择可能是使用 PHP 的 Iterator 类,这样您就可以指定更高级的规则。
$directoryIterator = new RecursiveDirectoryIterator($directory);
$iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
$fileList = new RegexIterator($iteratorIterator, '/^.*\.(txt|TXT)$/');
foreach($fileList as $file) {
echo $file;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3980 次 |
最近记录: |