首页 > 解决方案 > 如果不匹配模式,PHP 7.3 glob 模式返回文件

问题描述

我想返回与路径中的模式不匹配的文件列表,以便我可以删除它们。

文件位于以下目录:

"/var/www/servername/directory/subdir_level1/"

我要保留的文件的名称如下:

"e-Calendar_Test-[date and time here].csv"

它们以 开始"e-Calendar_Test-",以 adate in the middle结束,以".csv"

以下模式符合上述条件:

glob("/var/www/servername/directory/subdir_level1/e-Calendar_Test*.csv")

我想返回不匹配的文件。我尝试了几件事:

"^(?!/var/www/servername/directory/subdir_level1/e-Calendar_Test)*.csv"
"/var/www/servername/directory/subdir_level1/(^(?!e-Calendar_Test))*.csv"

还有一些,但似乎没有什么能返回我想要的。

标签: phpglob

解决方案


glob不支持正则表达式。使用glob模式,只需计算所有文件和与您的模式匹配的文件的差异。您可以*使用正确的数字?或​​日期调整日期:

$result = array_diff(glob("/var/www/servername/directory/subdir_level1/*.csv"),
                     glob("/var/www/servername/directory/subdir_level1/e-Calendar_Test-*.csv"));

如果您想要所有文件而不考虑扩展名*.csv,请*.*在第一个中替换。glob


推荐阅读