2011-01-17 9 views
20

Próbuję się lista plików w katalogu (rekurencyjnego lub nie) z PHP, gdzie nazwa pliku pasuje do określonego wzorca. Nigdy nie byłem zbyt dobry w regex, więc każda pomoc, jaką mógłbyś zaoferować, byłaby świetna. Mogłem szukać dosłownym kontroli na nazwach plików zwracanych, ale myślę, że nie jest taki świetny pomysł :)Znajdź wszystkie pliki w katalogu z ciągiem lub wzór w pliku PHP

aktualizacji + ostateczne rozwiązanie: 18.01.2011 @ 8:06 PM

Znalazłem inny sposób robienia tego, czego szukałem, gdy zrozumiałem jeszcze jedno wyrażenie regularne. To prawda, że ​​byłem całkowicie sfrustrowany tym, co robiłem z regexem. Dostałem trochę tego dzięki przyjacielowi, który odciągnął mnie na bok, aby wyjaśnić niektóre z tych kwestii w prostszy sposób, niż znalazłem w przewodnikach online.

To rozwiązanie polega przede wszystkim na sprawdzeniu konkretnego obrazu (ów) z wiodącym prefiksem "prefiksonu" lub "przedrostka 2", a także sprawdzenie, czy jest to obraz określonego typu (jpg, jpeg, png) i dopasowuje dowolny następujących formatów.

zależności od ślimaka została przekazana z Wordpress (gdzie używałem tego), to pasuje do tego wyrażenia regularnego. Oto przykładowy wpis:

prefixone.123-abc._tag1.001.jpg 
prefixone.345-xyz._tag1.002.jpeg 
prefixtwo.123-abc._tag2._tag1.003.jpg 
prefixone.123-abc._tag2.004.jpeg 
prefixtwo.345-xyz._tag2._tag3._tag1.005.jpg 
prefixtwo.123-abc._tag1.001.jpg 
prefixone.345-xyz._tag1.001.png 
prefixtwo.456-rst._tag1.001.png 

Wszystkie te pliki, które mogą mieć potencjalnie zostały zwrócone w pliku wpis z naszej funkcji() opendir, każdy z nich mógł być mecz, gdy ślimak dopasowane. Bez względu na kolejność oznaczania informacji w nazwie pliku.

Mam nadzieję, że pomoże to innemu użytkownikowi walczącemu z wyrażeniem regularnym. To trudny do opanowania, ale gdy zrozumiesz kilka podstawowych rzeczy, reszta zaczyna szybko wpadać na swoje miejsce, by zacząć budować własne.

Kod:

<?php 
// create an array to hold directory list 
$results = array(); 

// create a handler for the directory 
$directory = $_SERVER['DOCUMENT_ROOT'].'/some/path/to/images/'; 
$handler = opendir($directory); 

// open directory and walk through the filenames 
while ($file = readdir($handler)) { 

    // if file isn't this directory or its parent, add it to the results 
    if ($file != "." && $file != "..") { 

     // check with regex that the file format is what we're expecting and not something else 
     if(preg_match('#^(prefixone|prefixtwo)[^\s]*\.'.$wordpress-slug.'\.[^\s]+(\.(jpg|jpeg|png))#', $file)) { 

      // add to our file array for later use 
      $results[] = $file; 
     } 
    } 
} 
?> 

I faktycznie nie trzeba rekurencyjny na to, ale tam naprawdę wiele rekurencyjnych przykładów online i to było naprawdę najmniejszy z moich zmartwień. Izolacja treści według wzorca stanowiła rdzeń tego zadania, więc powyższy kod wystarczył.

Sidenote:

Tym, który zwrócił uwagę na "przyjęte komentarzy" Wczoraj nie miałem pojęcia, że ​​mi brakuje i przepraszam. Miałem zły dzień. Przepraszam, jeśli zdawało mi się, że ktoś napomyka o komentarzach. To jest świetna społeczność i cieszę się, że mogę także oddać tam, gdzie mogę.

+0

Odpowiedziałem na niektóre, ale stwierdzono również, że udzielono odpowiedzi na 0 z 6 kwalifikujących się pytań. Nie wiem nawet, gdzie te 6 obszarów oczekuje ode mnie. –

+1

Gdy widzę coś, na co moim zdaniem mogę się przyczynić, staram się odpowiedzieć lub zbadać problem danej osoby. –

+0

Tak, teraz to widzę. Wybaczcie chłopaki. –

Odpowiedz

15

Zastosowanie glob to find pathnames matching a pattern lub GlobIterator.

Jeśli trzeba, że ​​aby być rekurencyjne use a RegexIterator and a RecursiveDirectoryIterator.

Oznakowanie to CW bo pytanie jest pewny duplikat i można łatwo znaleźć przykłady dla wszystkich wyżej wymienionych podczas korzystania z funkcji wyszukiwania. Zrób tak, proszę.

+3

Nie szukałem "RegexIteratora", ponieważ nie przyszło mi to do głowy. Nie musisz mnie wzywać, żeby nie szukać. To pierwsza rzecz, którą robię, zanim poświęcę czas na napisanie czegoś. Wyszukiwanie jest szybsze. –

+2

Doceniam to, wskazując na to. Duża pomoc i podziękowania :) –

Powiązane problemy