为了账号安全,请及时绑定邮箱和手机立即绑定

如果不匹配模式,PHP 7.3 glob 模式返回文件

如果不匹配模式,PHP 7.3 glob 模式返回文件

PHP
猛跑小猪 2022-01-08 20:37:14
我想返回与路径中的模式不匹配的文件列表,以便我可以删除它们。文件位于以下目录:"/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"还有一些,但似乎没有什么能返回我想要的。
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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


查看完整回答
反对 回复 2022-01-08
?
慕标5832272

TA贡献1966条经验 获得超4个赞

我的猜测是,可能类似于,


^\/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 的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。


查看完整回答
反对 回复 2022-01-08
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信