2013-01-24 26 views
6

Rasgele sayıdaki rakamlar php glob işleviyle eşleştirilebilir mi? İkiden dört basamağa kadar değişen boyutlara sahip görüntü küçük resimlerinin dosya adlarını eşleştirmeye çalışıyorum.php glob pattern eşleşme sayısı basamak sayısı

Ben bir rakam aralığı sağlayabilmektedir biliyorum, ama bu sadece tek bir karakterle eşleşir:

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

Bu thumbname-1-1.jpg maç ama vb-10-10.jpg thumbname olmaz kullanılarak

cevap

3

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

bir test yaptı ve benim için çalışıyor.

+3

Bu, thumbname-1a-1b.jpg – baseten

+0

eşleşmesine rağmen yeterince iyi olabilir. Bu, globun ulaşabileceği en iyi şey gibi gözüküyor, ancak sonuçta, aynı zamanda da çok belirsizdi. match thumbname-2-1-1.jpg. Ben RegexIterator kullanarak – baseten

+0

yorumlarda yayınlanan regex kullanarak sona erdi o kadar glob çalışır ("thumbname- [0-9] + - [0-9] +. Jpg")? Eğer sadece rakamlar varsa ... – Tebe

4

Alternatif

$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

Teşekkürler, aslında regex desen üzerinde bana çok daha fazla kontrol vereceğinden bu yönteme gidebilirim. Küresel yanıtı, asıl soru olduğu gibi kabul ettim. – baseten

+0

Bu yöntemle, glob modeli çok belirsiz olduğu için gittim. Ben ek dosyaları kaldırıldı thumbname-2-1-1.jpg eşleşecek buluyordu. Kullandığım regex: '/^thumbname-[0-9]+-[0-9]+(@2x)?\.(jpg|jpeg|gif|png)$/i' bana verdiği gibi arbritary rakam doğru ve isteğe bağlı retina eki – baseten

+0

sadece tam dosya yolu RegexIterator sadece dosya adı ile test alır gibi görünüyor^hat çapa başlaması ile başarısız görünüyor fark? Kolay enoght basitçe başlangıç ​​çapa kaldırarak, değiştirmek olmalı – baseten

0

Farklı glob diziler içine numaraları bölmek ve bunları birleştirebilir bir Normal ifadeyle RecursiveDirectoryIterator kullanarak) (glob.

Örneğin ilk 0-9 arasında bir diziye tüm görüntüleri almak:

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

Bundan sonra 10 ila numaralarını tutan başka bir dizi oluşturun - 99: size yeni Asistan

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

birine o 2 diziler birleştirme ve 0-99 tüm alıyorum:

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

Sen olabildiğince ölçüde o kadar Sadece bir [0-9] ekleyin