使用Regex搜索PHP的递归目录

时间:2013-01-11 15:25:44

标签: php regex search recursion directory

如果我需要递归搜索某些目录以便找到.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文件,但是如果找到多个文件,我希望能够找到一个特定的文件。

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

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

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

然而它不是递归的。并取决于指定的正确目录。 任何帮助将非常感谢。

3 个答案:

答案 0 :(得分:2)

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

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

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

有关详细信息,请参阅PHP preg_match()

答案 1 :(得分:1)

更改行:

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

要:

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

虽然正则表达式更灵活,但您仍然可以使用strpossubstr

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

答案 2 :(得分:0)

尝试搜索两者:

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

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