簡體   English   中英

使用Regex搜索PHP的遞歸目錄

[英]Recursive Directory Searching PHP with Regex

如果我需要遞歸搜索某些目錄以便找到.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);

但它不是遞歸的。 並取決於指定的正確目錄。 任何幫助將非常感謝。

您可以使用正則表達式代替strpos(),而不是:

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

此示例表示“* hello * .apk”。 所以一個字符串在其中某處有“hello”並以“.apk”結尾。

有關詳細信息,請參閱PHP preg_match()

換行:

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

至:

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

雖然正則表達式更靈活,但您仍然可以使用strpossubstr

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

嘗試搜索兩個:

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

!== false是必要的,否則將不會返回Hello.apk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM