2013-01-24 12 views
6

क्या php glob फ़ंक्शन के साथ अंकों की मनमानी संख्या से मिलान करना संभव है? मैं छवि थंबनेल के लिए फ़ाइल नामों से मिलान करने की कोशिश कर रहा हूं जो कि दो से चार अंकों के आयामों के साथ समाप्त होता है।अंकों की आर्बिट्रे संख्या के लिए PHP ग्लोब पैटर्न मिलान

मैं जानता हूँ कि मैं एक अंकों रेंज की आपूर्ति कर सकते हैं, लेकिन यह केवल एक ही अक्षर से मेल खाता:

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

यह thumbname-1-1.jpg से मिलान करेगा लेकिन thumbname-10-10.jpg नहीं, आदि

उत्तर

3

उपयोग करके देखें: glob("thumbname-[0-9]*-[0-9]*.jpg")

मैं एक परीक्षण किए गए और यह मेरे लिए काम करता है।

+3

यह पर्याप्त हो सकता है, हालांकि यह thumbname-1a-1b.jpg – baseten

+0

से मेल खाएगा यह ग्लोब प्राप्त करने वाला सबसे अच्छा प्रतीत होता है, लेकिन अंत में यह भी अस्पष्ट था क्योंकि यह भी अस्पष्ट था मैच thumbname-2-1-1.jpg। मैं RegexIterator का उपयोग करके – baseten

+0

टिप्पणियों में पोस्ट किए गए रेगेक्स के साथ समाप्त हो गया, यह बहुत ग्लोब ("थंबनाम- [0-9] + - [0-9] +। Jpg") काम करेगा? यदि यह shoudl केवल संख्या हो ... – Tebe

4

वैकल्पिक glob के लिए(), एक regexp साथ 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

धन्यवाद, मैं वास्तव में इस विधि के साथ जा सकता हूं क्योंकि रेगेक्स मुझे पैटर्न पर अधिक नियंत्रण देगा। मैंने ग्लोब जवाब स्वीकार कर लिया है हालांकि यह मूल प्रश्न था। – baseten

+0

मैं इस विधि के साथ अंत में गया क्योंकि ग्लोब पैटर्न बहुत संदिग्ध था। मुझे लगता है कि यह thumbname-2-1-1.jpg से मेल खाता है जो अतिरिक्त फ़ाइलों को हटा देता है। मैं जिस रेगेक्स का उपयोग कर रहा था वह था: '/^thumbname-[0-9]+-[0-9]+(@2x)?\.(jpg|jpeg|gif|png)$/i' जैसा कि उसने मुझे दिया सही arbritary अंक और वैकल्पिक रेटिना प्रत्यय – baseten

+0

बस ध्यान दिया कि यह लाइन एंकर की शुरुआत के साथ असफल प्रतीत होता है^ऐसा लगता है कि पूर्ण फ़ाइल पथ RegexIterator द्वारा परीक्षण किया जाता है न केवल फ़ाइल नाम? – baseten

0

आप अलग अलग ग्लोब विन्यास में, संख्या विभाजित है और उन्हें मर्ज कर सकते हैं। उसके बाद

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

यदि आप किसी अन्य सरणी जो 10 से संख्या रखती बना सकते हैं - 99:

उदाहरण के लिए पहले आप सभी छवियों को 0-9 से एक सरणी में रखना अब आप

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

एक में उन 2 सरणियों विलय और 0-99 से सभी मिलती है:

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

आप कर सकते हैं हद तक यह जितना आप बस [0-9]

संबंधित मुद्दे