2009-09-26 14 views
7

के साथ अक्षरों के समूह खोजने की कोशिश कर रहा है मुझे कोष्ठक में संलग्न वर्णों के 1 या अधिक परिभाषित समूह ढूंढने की आवश्यकता है। यदि एक से अधिक समूह मौजूद हैं तो इसे एक हाइफ़न से अलग किया जाएगा।रेगेक्स

उदाहरण:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

मैं समझ गए होंगे कि कैसे समूह के लिए कि स्ट्रिंग केवल एक ही समूह में शामिल हैं:

/\(us\)|\(jp\)/ 

हालांकि, मैं चकित हूँ यह अधिक से अधिक पाने के लिए आता है जब एक, एक हाइपन से अलग और किसी विशेष क्रम में: (us-jp) या (jp-us)

किसी भी मदद की सराहना की जाती है।

धन्यवाद, साइमन

+0

क्या आप जो खोज रहे हैं उसे स्पष्ट कर सकते हैं? आपके द्वारा प्रदान किया गया रेगेक्स दोनों (यूएस-जेपी) और (जेपी-यूएस) का पता लगाएगा। – bbg

उत्तर

13
\((\b(?:en|jp|us|eu)-?\b)+\) 

स्पष्टीकरण:

 
\(     // opening paren 
(      // match group one 
    \b     // word boundary 
    (?:en|jp|us|eu)  // your defined strings 
    -?     // a hyphen, optional 
    \b     // another word boundary 
)+      // repeat 
\)      // closing paren 

मैचों:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

से मेल नहीं खाता:

(jp-us-eu-) 
(-jp-us-eu) 
(-jp-us-eu-) 
+1

अच्छा समाधान, मेरे पास लंबा समय था, लेकिन ब्रांड्स से पहले '\ b' शब्द सीमा निर्दिष्ट करना सुनिश्चित करता है कि हमारे पास पीछे पीछे डैश नहीं है। –

2

इस प्रयास करें:

/\([a-z]{2}(?:-[a-z]{2})*\)/ 

कि कोष्टक में किसी भी दो पत्र अनुक्रम से मेल खाएगी कि मेरे अधिक दो पत्र दृश्यों hypens द्वारा separeted होते हैं। तो (ab), (ab-cd), (ab-cd-ef), (ab-cd-ef-gh) आदि

+0

एक और संभावना, +1। यद्यपि "वर्णों के परिभाषित समूहों" की आवश्यकता नहीं है। हालांकि, इसे ठीक करने के लिए खुद को दोहराने की आवश्यकता होगी। – Tomalak