【问题标题】:Recursive Directory Searching PHP with Regex使用正则表达式搜索 PHP 的递归目录
【发布时间】:2012-12-26 05:14:30
【问题描述】:

如果我需要递归搜索某些目录以找到 .something 文件怎么办?

到目前为止我有这个代码:

   $dir_iterator = new RecursiveDirectoryIterator('path/');
   $iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);

   foreach ($iterator as $filename) {
     if(strpos($filename, ".apk")){
         $page->addToBody(substr($filename, 2)."</br>");
         $filename = substr($filename, 2);  
     }
   }

这适用于返回目录中唯一的 .apk 文件,但是如果找到多个文件,我希望能够找到一个特定文件。

例如我想说找到所有包含“hello”并以.apk结尾的文件名。

使用 Glob() 我做到了,效果很好:

glob('./'path'/*{'Hello'}*.apk',GLOB_BRACE);

但是它不是递归的。并且取决于指定的正确目录。 任何帮助将不胜感激。

【问题讨论】:

  • Hmz... 1. 如果你在linux机器上,你可以利用os函数! 2. 如果有一个名为“hello”的目录,是否应该返回其中的所有文件? 3.你说的是正则表达式,但你的代码使用了strpos。你真正想要/需要哪个?

标签: php regex search recursion directory


【解决方案1】:

尝试同时搜索:

if(strpos($filename, ".apk") !== false && strpos($filename, "Hello") !== false){

!== false 是必须的,否则不会返回 Hello.apk

【讨论】:

    【解决方案2】:

    你可以使用正则表达式来代替 strpos():

    [...]
    if(preg_match('/.*hello.*\.apk$/', $filename))
    [...]
    

    这个例子代表“*hello*.apk”。所以一个字符串在某处有“hello”并以“.apk”结尾。

    更多信息请参见PHP preg_match()

    【讨论】:

    • 那么你能在正则表达式中添加额外的搜索字段吗?例如查找包含 hello、abc、test 并以 .apk 结尾的文件名。
    【解决方案3】:

    换行:

    if(strpos($filename, ".apk"))
    

    收件人:

    if (preg_match('@hello.*\.apk$@', $filename))
    

    虽然正则表达式更加灵活,但您仍然可以将strpossubstr 一起使用:

    if (strpos($filename, 'hello') !== false && substr($filename, -4) === '.apk')
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2012-01-16
      • 2015-05-31
      • 2012-05-21
      • 2013-06-17
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多