2012-04-13 7 views
17

के साथ स्ट्रिंग ढूंढें मैंने रेगेक्स पर कई ट्यूटोरियल पढ़े हैं लेकिन यह मेरे सिर में नहीं टिकेगा। मैं अपने पैटर्न को काम करने के लिए कभी नहीं मिल सकता। उम्मीद है कि कोई मदद कर सकता है।php regex

मैं एक php चर ($ सामग्री) जहाँ मैं एक निश्चित पैटर्न है कि इस

तरह लग रहा है खोजने की जरूरत है [//फ़ोल्डर की/गैलरी :: नाम /]

मैं चाहूँगा करने के लिए है खोज:

- starting with "[gallery::" 
- any other character (variable length) 
- ending with "]" 

अब तक, PHP में मेरे पास है:

preg_match('/\[gallery\:/', $content, $matches, PREG_OFFSET_CAPTURE); 

मैं [पा सकते हैं गैलरी: लेकिन वह यह है । मैं बाकी को ढूंढने में सक्षम होना चाहता हूं (: नाम/का/फ़ोल्डर /])

किसी भी मदद की सराहना की जाती है! धन्यवाद!

उत्तर

26

यह कब्जा करने का प्रयास करें:

preg_match("/\[gallery::(.*?)]/",$content,$m); 

अब $m एक सरणी है:

0 => [gallery::/name/of/the/folder/] 
1 => /name/of/the/folder/ 
+0

स्ट्रिंग कुछ 'के साथ शुरू' है, तो एक '^' वर्ण पहले जोड़ें करने के लिए सुनिश्चित करने के लिए "\\ [गैलरी" – AndrewPK

+0

होगा कई नहीं आवृत्तियां ([गैलरी ::/नाम/के// फ़ोल्डर /] [गैलरी ::/name/of/the/folder /]) सभी पात्रों पर लालची कैप्चर का उपयोग करने में समस्याएं पैदा करते हैं? –

+0

यह '[गैलरी ::]' से मेल खाएगा, मैं इसे '[गैलरी :: (। +?)]' – nathanjosiah

2

परिवर्तन आपके regex

को
'/\[gallery::([A-Za-z\/]+)\]/' 

जब से मैं कोष्टक में फ़ोल्डर/पथ हिस्सा डाल दिया, आपको इसके बाहर एक कैप्चर समूह प्राप्त करना चाहिए।

+0

किसी अन्य की आवश्यकता नहीं है ':', जिसे भागने की आवश्यकता नहीं है, और यदि आपको '/' से मिलान करने की आवश्यकता है, तो आपको एक अन्य डिलीमीटर चरित्र का उपयोग करना चाहिए जैसे '#' – DaveRandom

+0

'[ए-ज़ा-जेड] 'एक चीज़ के लिए केवल एक वर्ण से मेल खाता है , लेकिन यह "सभी पात्रों" से मेल नहीं खाता है - और निश्चित रूप से फ़ाइल नामों में अनुमत नहीं है। –

+0

@ कोलिंक, माता-पिता –

0
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) { 
    echo "A match was found."; 
} else { 
    echo "A match was not found."; 
}