2013-01-24 10 views
6

Ist es möglich, eine beliebige Anzahl von Stellen mit der php glob Funktion zu verknüpfen? Ich versuche, Dateinamen für Bildminiaturbilder zu finden, die mit Zwei- bis Vierstellendimensionen enden.php glob pattern Übereinstimmung für arbitray Anzahl der Ziffern

Ich weiß, ich kann einen einstelligen Bereich liefern, aber das passt nur ein einzelnes Zeichen:

glob("thumbname-[0-9]-[0-9].jpg") 

Dies wird thumbname-1-1.jpg passen, aber nicht thumbname-10-10.jpg usw.

Antwort

3

Versuchen sie es mit: glob("thumbname-[0-9]*-[0-9]*.jpg")

machte ich einen Test, und es funktioniert gut für mich.

+3

Dies könnte gut genug sein, obwohl es übereinstimmen wird thumbname-1a-1b.jpg – baseten

+0

Dies scheint das Beste zu sein, dass Glob erreichen kann, aber am Ende war es zu vieldeutig, wie es auch wäre Übereinstimmung thumbname-2-1-1.jpg. Ich benutzte den RegexIterator mit der Regex, die ich in den Kommentaren – baseten

+0

gepostet habe, wird es so funktionieren glob ("thumbname- [0-9] + - [0-9] +. Jpg")? Wenn es nur Zahlen sein sollen ... – Tebe

4

Alternative(), um glob, mit einem regexp mit recursiveDirectoryIterator

$Directory = new RecursiveDirectoryIterator('path/to/project/'); 
$Iterator = new RecursiveIteratorIterator($Directory); 
$Regex = new RegexIterator($Iterator, 
    '/^thumbname-[0-9]*-[0-9]*\.jpg$/i', 
    RecursiveRegexIterator::GET_MATCH 
); 
+0

Danke, ich kann mit dieser Methode tatsächlich gehen, da die Regex mir viel mehr Kontrolle über das Muster geben wird. Ich habe die Glob-Antwort akzeptiert, obwohl es die ursprüngliche Frage war. – baseten

+0

Ich ging mit dieser Methode am Ende als das Glob-Muster zu zweideutig war. Ich fand, dass es thumbname-2-1-1.jpg entsprechen würde, das zusätzliche Dateien entfernte. Die Regex, die ich am Ende benutzt habe, war: '/^thumbname-[0-9]+-[0-9]+(@2x)?\.(jpg|jpeg|gif|png)$/i' wie mir das gegeben hat wahre Arbritary Ziffern und optional Retina Suffix – baseten

+0

gerade bemerkt, dass es scheint, mit dem Start der Linie Anker zu versagen^scheint wie der vollständige Dateipfad wird durch den RegexIterator nicht nur den Dateinamen getestet? – baseten

0

Sie könnten die Zahlen in verschiedenen glob-Arrays aufgeteilt und sie verschmelzen.

Zum Beispiel zuerst nehmen Sie alle Bilder von 0-9 in einem Array:

$g1 = glob('thumbname-[0-9].jpg'); 

Danach können Sie ein anderes Array erstellen, die die Zahlen von 10 hält - 99:

$g2 = glob('thumbname-[0-9][0-9].jpg'); 

Sie jetzt Verschmelzen Sie diese 2 Arrays zu einem und erhalten Sie alle von 0 bis 99:

$gResult = array_merge($g1, $g2); 

Sie können es so viel wie Sie möchten nur hinzufügen [0-9]

Verwandte Themen