如果不匹配模式,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"

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


猛跑小猪
浏览 141回答 2
2回答

杨__羊羊

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。

慕标5832272

我的猜测是,可能类似于,^\/var\/www\/servername\/directory\/subdir_level1\/(?!e-Calendar_Test[^.\r\n]*).*\.csv$这里可能需要。测试$re = '/^\/var\/www\/servername\/directory\/subdir_level1\/(?!e-Calendar_Test[^.\r\n]*).*\.csv$/m';$str = '/var/www/servername/directory/subdir_level1/e-Calendar_Test2019-1-1-11-11-12.csv/var/www/servername/directory/subdir_level1/e-Calendar_Test2019-1-1-11-11-12.csv/var/www/servername/directory/subdir_level1/something_else.csv';preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);var_dump($matches);输出array(1) {  [0]=>  array(1) {    [0]=>    string(62) "/var/www/servername/directory/subdir_level1/something_else.csv"  }}如果您想简化/修改/探索表达式,它已在regex101.com 的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。
打开App,查看更多内容
随时随地看视频慕课网APP