1

.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);

ただし、再帰的ではありません。指定されている正しいディレクトリに依存します。どんな助けでも大歓迎です。

4

3 に答える 3

2

strpos()の代わりに、次のような正規表現を使用できます。

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

この例は「*hello*.apk」を表しています。したがって、どこかに「hello」があり、「。apk」で終わる文字列。

詳細については、 PHP preg_match()を参照してください。

于 2013-01-11T15:31:14.080 に答える
1

行を変更します。

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

に:

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

正規表現はより柔軟ですが、次のものstrposと一緒に使用することもできsubstrます。

if (strpos($filename, 'hello') !== false && substr($filename, -4) === '.apk')
于 2013-01-11T15:33:40.493 に答える
0

両方を検索してみてください:

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

!== false が必要です。それ以外の場合、Hello.apk は返されません

于 2013-01-11T15:29:55.973 に答える