2008-09-30 7 views
16
Pattern pattern = Pattern.compile("^[a-z]+$"); 
String string = "abc-def"; 
assertTrue(pattern.matcher(string).matches()); // obviously fails 

क्या चरित्र वर्ग "-" से मेल खाता है?जावा रेगेक्स में, मैं एक चरित्र वर्ग कैसे प्राप्त कर सकता हूं उदा। [ए-जेड] एक - ऋण चिह्न से मेल खाता है?

उत्तर

35

वर्णों के बीच ऋण चिह्न न रखें -

+0

यह डाउनवॉट किया गया था, लेकिन यह भी काम करता है। मैं हमेशा अंत में डैश डालता हूं। – harpo

+0

यह मेरे लिए काम कर रहा है – daveb

+2

मुझे सच में यकीन नहीं है कि यह मानक regexp वाक्यविन्यास है। मुझे शक नहीं है कि यह काम करता है, लेकिन यह लगभग निश्चित रूप से सबसे अच्छा अभ्यास नहीं है। –

3

यह काम करता है मुझे

Pattern p = Pattern.compile("^[a-z\\-]+$"); 
    String line = "abc-def"; 
    Matcher matcher = p.matcher(line); 
    System.out.println(matcher.matches()); // true 
+0

बस उत्सुक है, क्या यह भी काम करता है यदि आपकी रेखा "abc \ def" है? ऐसा लगता है कि आप दोनों \ और - अक्षर से मेल खाते हैं। – Parappa

+1

@ पैराप्पा: मिलान करने के लिए \\ पैटर्न में होना आवश्यक है (यानी^"^ [ए-जेड \\\\ -] + $" जावा में)। – robinst

4

मैं अलग तरीके से व्यक्त करता हूँ के लिए एक छोटे से अधिक वस्तुतः "वर्णों के बीच रख दिया नहीं है"।

डैश को कक्षा वर्ग में पहला या अंतिम चरित्र बनाएं। उदाहरण के लिए "[-a-z1-9]" लोअर-केस वर्ण, अंक या डैश से मेल खाता है।

5

एक चरित्र वर्ग [...] एक - अंदर विशेष रूप से इलाज किया जाता है (एक सीमा ऑपरेटर के रूप में) अगर यह दोनों पक्षों पर पात्रों से घिरा हुआ है। इसका मतलब है कि यदि आप शुरुआत में या चरित्र वर्ग के अंत में - शामिल करते हैं तो इसका शाब्दिक रूप से व्यवहार किया जाएगा (गैर-विशेष)।

^[a-z-]+$ 

या

^[-a-z]+$ 

- कि हम जोड़ा इलाज चल रहा है के बाद से सचमुच यह से बचने के लिए कोई जरूरत नहीं है:

तो तुम regex का उपयोग कर सकते हैं। हालांकि यदि आप ऐसा करते हैं तो यह कोई त्रुटि नहीं है।

एक और (कम अनुशंसित) जिस तरह से चरित्र वर्ग में - शामिल नहीं करने के लिए है:

^(?:[a-z]|-)+$ 

ध्यान दें कि कोष्ठक | के रूप में इस मामले में वैकल्पिक नहीं हैं एक बहुत कम पूर्वता, कोष्ठक के साथ ऐसा नहीं है :

^[a-z]|-+$ 

स्ट्रिंग की शुरुआत और एक या अधिक - अंत में एक लोअरकेस वर्णमाला से मेल खाएगी।

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