2011-02-07 18 views
36

के बीच अंतर मैं टेक्स्ट बॉक्स के लिए एक इनपुट सत्यापनकर्ता प्रोग्राम करने के लिए रेगेक्स का उपयोग कर रहा हूं जहां मुझे केवल वर्णमाला वर्ण चाहिए। मैं सोच रहा था कि [A-z] और [a-zA-Z] बराबर थे या यदि प्रदर्शन प्रदर्शन के विपरीत थे।रेगेक्स [ए-जेड] और [ए-जेए-जेड]

मैं अपनी खोजों पर [a-zA-Z] पढ़ रहा हूं और [A-z] का कोई उल्लेख नहीं है।

मैं जावा के String.matches(regex) का उपयोग कर रहा हूं।

उत्तर

53

[A-z], A से z तक की सीमा में ASCII वर्ण से मेल खाते हैं, जबकि [a-zA-Z] ASCII वर्ण सीमा में A से Zऔर तक की सीमा में a से z से मेल होगा। पहली नज़र में, यह समकक्ष प्रतीत हो सकता है - हालांकि, यदि आप ASCII वर्णों के this table को देखते हैं, तो आप देखेंगे कि A-z में कई अन्य वर्ण शामिल हैं। विशेष रूप से, वे [, \, ], ^, _, और `` `(जिसे आप स्पष्ट रूप से नहीं चाहते हैं) हैं।

+6

मुझे लगता है कि मैं सिर्फ सच में यकीन है कि अगर वहाँ के बीच जेड एक वर्ण नहीं था नहीं था बिना। – Eric

+1

@Eric https://secure.wikimedia.org/wikipedia/en/wiki/Ascii मुझे विश्वास है कि आपको 'Z \' और 'a' के बीच' [\\]^- \ '' मिलेगा – KitsuneYMG

8

ASCII table पर एक नज़र डालें। आप देखेंगे कि Z और a के बीच कुछ वर्ण हैं, इसलिए आप जितना अधिक इरादा रखते हैं उससे मेल खाते हैं।

9

एजे मैच 'ए' से 'ज़ेड' एजेड मैच 'ए' से 'जेड' एज़ में इन सभी के साथ-साथ 'जेड' और 'ए' के ​​बीच के पात्र भी हैं जो [] ^/_ `

http://www.asciitable.com/

6

को वर्ग कोष्ठक एक चरित्र वर्ग बना सकते हैं और हाइफन गए दो वर्णों के बीच हर चरित्र जोड़ने के लिए एक आशुलिपि है देखें। i.e. [A-F][ABCDEF] लिखा जा सकता है।

चरित्र वर्ग [A-z] उन पात्रों के बीच हर चरित्र से मेल खाएगा, जिसमें एएससीआईआईआई में कुछ अन्य पात्र शामिल हैं जैसे '[', '\' और ']'।

दोनों मामलों को निर्दिष्ट करने का एक विकल्प नियमित अभिव्यक्ति को /i संशोधक का उपयोग करके केस-असंवेदनशील होने के लिए सेट करना होगा।

3

पर एक नजर डालें ASCII chart (जो जावा पात्रों पर आधारित हैं): वहाँ जेड के बीच स्थित काफी कुछ विराम चिह्न वर्ण और एक, कर रहे हैं अर्थात् इन:

[\]^ _` 
6

जब आप ASCII पर एक नज़र मेज, तो आपको निम्न देखेंगे:

A = 65 
Z = 90 
a = 97 
z = 122 

तो, [A-z] 122. 65 से हर चार से मेल खाएगी यह इन वर्ण भी शामिल है (91 -> 97) के रूप में अच्छी तरह से:

[\]^_` 

इसका मतलब यह है [A-Za-z], केवल वर्णमाला से मेल खाएगी देखा वर्ण