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ę.
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. –
Gdy widzę coś, na co moim zdaniem mogę się przyczynić, staram się odpowiedzieć lub zbadać problem danej osoby. –
Tak, teraz to widzę. Wybaczcie chłopaki. –