【问题标题】:Cakephp Files and Folder class with regex to search for file带有正则表达式的 Cakephp 文件和文件夹类来搜索文件
【发布时间】:2015-06-24 16:11:36
【问题描述】:

我正在创建某种外壳来删除备份文件。我使用关键字“bkp”创建原始文件的备份。它可以是文件名中的任何位置,例如 ["abc.bkp.ctp", "abc-bkp.ctp", abc_bkp.ctp", "bkp_abc.ctp"]。我的意思是任何方式.我希望使用shell删除所有文件。我正在使用Cakephp的文件N文件夹类“http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html”。我将如何编写正则表达式来搜索这些文件。

我的 shell 逻辑是什么。

    public function removeBkp() {
        $path = BASE_PATH . DS . APP_DIR . DS;
        $count = 0;

        $this->out("", 2);
        $this->out("-------------------------------------", 1);
        $this->out("Path : " . $path, 1);
        $this->out("FILES DETAILS", 1);
        $this->out("-------------------------------------", 2);
        $dir = new Folder($path);
        // Need to seach bkp files here 
        $defaultFiles = $dir->findRecursive("(bkp)");

        $results = $defaultFiles;
        if ($results == null || empty($results)) {
            $this->out("No file to delete.", 3);
        } else {
            foreach ($results as $file) {
                // unlink($file);
                $this->out("File removed - " . $file, 1);
                $count++;
            }
            $this->out("Total files: " . count($results), 1);
        }
    }

【问题讨论】:

  • .*bkp.*[.]ctp 之类的东西应该可以。 Demo here.

标签: regex cakephp


【解决方案1】:

您可以使用此正则表达式匹配所有文件名:

([\w._-]*bkp[\S]*?\.ctp)

假设仅._- 用于拆分文件,您可能需要向该字符类添加更多内容。

此正则表达式还假定文件始终以 ctp 结尾。

演示:https://regex101.com/r/tB9nM9/1

编辑:如果您希望匹配任何扩展名,可以使用\w{3} 概括扩展名。其中 3 是长度,如果需要,您可以在此处添加差异,但通常更具体更好。

([\w._-]*bkp[\S]*\.\w{3})

演示:https://regex101.com/r/tB9nM9/2

【讨论】:

  • 如果我想为任何不特定于 ctp 的扩展执行此操作。
  • 您可以用正则表达式替换 ctp 以匹配 3 个字符。我会对此进行更新。
  • ([\w._-]*bkp[\S]*)。这样做了。谢谢
  • 那行得通,是的。不过,我鼓励您确定要匹配的文件类型并将它们包含在交替模式中。这样您就可以更好地控制您的目标。从一开始,将ctp 替换为(?:ctp|php|sql) 或您需要的任何其他内容。
  • 我想向你学习正则表达式。编程中的一件事我总是感到困惑和害怕。 (Y)
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多