2009-11-13 4 views
5

यह आसान होना चाहिए लेकिन मैं एक नोब हूं और मैं इसे समझने के लिए नहीं कर सकता।php regex: lookbehind और lookahead और लालची समस्या

apple [p2]banana[/p2] grape [p2]lemon[/p2] 

यह "केला" और "नींबू से मेल खाना चाहिए: मैं विशेष खोलने/बंद टैग के अंदर पाठ मैच के लिए regex का उपयोग करने के लिए कोशिश कर रहा हूँ: [p2] [/ p2]

इस पाठ में

तो "। मैंने जो रेगेक्स अभी तक काम किया है वह है:

(?<=\[p2\]).+(?=\[\/p2\]) 

लेकिन यह बहुत लालची है। यह केले में "बी" से शुरू होता है और नींबू में "एन" के साथ समाप्त होता है, केले [/ p2] अंगूर [पी 2] नींबू से मेल खाता है। मैं सिर्फ केले और नींबू से कैसे मेल करूं?

+1

बेशक, जैसे ही मैं इसे पोस्ट करता हूं, मुझे लगता है कि मैंने अंततः इसे समझ लिया: (? <= \\ [p2 \\])। +? (? = \\ [\/p2 \\]) सही? वास्तव में –

+0

। तुम सही हो। – Franz

उत्तर

5

यह करना चाहिए:

(?<=\[p2\]).+?(?=\[\/p2\]) 

मैं परिमाणक गैर लालची बनाने के लिए प्रश्न चिह्न गयी।

+0

उत्तर –

+1

के लिए धन्यवाद वैकल्पिक रूप से, आप यह इंगित करने के लिए 'यू' संशोधक निर्दिष्ट कर सकते हैं कि पैटर्न में सभी क्वांटिफ़ायर को लालची के रूप में माना जाना चाहिए, उदा। 'preg_match ('/(? <= \ [p2 \])। + (? = \ [\/p2 \])/यू ', ....' नोट ** ** ** ** यू' वर्ण स्वचालित रूप से होगा '+' चिह्न को गैर-लालची में परिवर्तित करें, और पीछे की ओर '?' (लालच ऑपरेटर) आपके द्वारा वर्णित व्यवहार को प्रदर्शित करने का कारण बन जाएगा। जानने के लायक। देखें: http://us2.php.net/manual /en/reference.pcre.pattern.modifiers.php – Dereleased

+0

@ हटाया गया: मुझे समझ में नहीं आता है। वास्तव में क्या अंतर है? टिप्पणी के लिए धन्यवाद, हालांकि – Franz

0

रेगेक्स संशोधक का उपयोग करने के बजाय, आप मानक पर्ल स्टाइल मैच संशोधक का उपयोग कर सकते हैं और एक जोड़ सकते हैं? + या * के बाद उस विशिष्ट भाग को लालची होने के लिए कहें। ऊपर उल्लिखित, लेकिन विशिष्टता मदद कर सकते हैं।