2009-06-22 18 views
15

मुझे लगता है कि मैं खुद को एक preg_match regex के साथ भ्रमित कर रहा हूं, इसलिए ताजा आंखें और मदद की सराहना की जाएगी।Regex वैकल्पिक समूह?

/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se 

मैं उदा संख्या इनपुट और पेट के बनाने के लिए देख रहा हूँ:

मेरे वर्तमान regex इस प्रकार है : (1,4) वैकल्पिक, तो यह मेल खाएगा:

<!--menu:start--><!--menu:end--> 

या

<!--menu:start:(0,3)--><!--menu:end--> 

उत्तर

30

एन एक गैर मिलान समूह के साथ निकट और वैकल्पिक के लिए सेट: (?:...)?

/<!--menu:start(?::\(([0-9])\,([0-9])\))?-->(.*?)<!--menu:end-->/se 
27

इस तरह:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se 

मैं एक गैर पर कब्जा समूह, (?:) जोड़ दिया है, उस हिस्से के आस-पास आप वैकल्पिक होना चाहते हैं, और उसके बाद इसे एक प्रश्न चिह्न के साथ प्रत्ययित किया गया: (?:<optional content>)?

+0

Haha , यह एक करीबी टाई है ... :) – glmxndr

+0

दरअसल, यह =) – Blixt

+0

धन्यवाद दोस्तों :) एक को चुनना था! एक स्पष्ट स्पष्टीकरण के लिए – Joel

5

यह एक वैकल्पिक गैर पर कब्जा समूह का उपयोग करता है - अपने वैकल्पिक हिस्सा मिलान करने के लिए, और भी \d बजाय [0-9] के अंकों मैच के लिए - (?:)?:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se 

कोष्टक में संख्या एक से अधिक अंकों से मिलकर कर सकते हैं, तो इसके बजाय एक का उपयोग करें:

/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se 
+0

क्या [0-9] के बजाय \ d का उपयोग करने का कोई फायदा है? – Joel

+0

वास्तव में कोई नहीं, सिवाय इसके कि \ d छोटा है। :-) – Helen

+0

देखें http://stackoverflow.com/questions/890686/should-i-use-d-or-0-9-to-match-digits-in-a-perl-regex \ d के अंतर के लिए और [0-9] – ParoX

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