आपको गलतफहमी हुई लगती है कि चरित्र वर्ग परिभाषा रेगेक्स में कैसे काम करती है।
तार के किसी भी मैच के लिए 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, या 12, इस काम करता है की तरह कुछ:
0[1-9]|1[0-2]
संदर्भ
व्याख्या
एक वर्ण वर्ग, अपने आप में, इनपुट स्ट्रिंग से एक और एक वर्ण का मिलान करने का प्रयास करता है । [01-12]वास्तव में परिभाषित करता है [012], एक चरित्र वर्ग है कि 3 वर्णों के किसी के खिलाफ इनपुट से एक चरित्र से मेल खाता है 0, 1या 2।
-सीमा परिभाषा से चला जाता है 1के लिए 1, जो सिर्फ शामिल 1। दूसरी ओर, कुछ की तरह [1-9]शामिल हैं 1, 2, 3, 4, 5, 6, 7, 8, 9।
शुरुआती लोग अक्सर चीजों को परिभाषित करने की गलती करते हैं [this|that]। यह "काम" नहीं करता है। यह चरित्र परिभाषा परिभाषित करता है [this|a], यानी यह 6 वर्ण की किसी भी के खिलाफ इनपुट से एक चरित्र से मेल खाता है t, h, i, s, |या a। अधिक से अधिक संभावना (this|that)है कि क्या इरादा है।
संदर्भ
सीमाएं कैसे परिभाषित की जाती हैं
तो अब यह स्पष्ट है कि एक पैटर्न between [24-48] hours"काम" नहीं करता है। इस मामले में वर्ण वर्ग के बराबर है [248]।
यही है, -एक चरित्र वर्ग परिभाषा में पैटर्न में संख्यात्मक सीमा को परिभाषित नहीं किया गया है। Regex इंजन वास्तव में पैटर्न में "समझ" संख्याओं को सीमित नहीं करता है, परिमित पुनरावृत्ति सिंटैक्स के अपवाद के साथ (उदाहरण a{3,5}के लिए 3 और 5 के बीच मेल खाता हैa ) होता है।
इसके बजाय रेंज की परिभाषा श्रेणियों को परिभाषित करने के लिए वर्णों के ASCII / यूनिकोड एन्कोडिंग का उपयोग करती है। चरित्र 0को ASCII में दशमलव 48 के रूप में एन्कोड किया गया है; 957 है। इस प्रकार, वर्ण परिभाषा [0-9]में सभी वर्ण शामिल हैं जिनके मान एन्कोडिंग में दशमलव 48 और 57 के बीच हैं। बल्कि समझदारी से, डिजाइन द्वारा इन चरित्र 0, 1, ...,9 ।
यह सभी देखें
एक और उदाहरण: ए टू जेड
आइए एक और आम चरित्र वर्ग परिभाषा पर एक नज़र डालें [a-zA-Z]
ASCII में:
A = 65, Z = 90
a= 97, z= 122
इस का मतलब है कि:
[a-zA-Z]और [A-Za-z]बराबर हैं
- अधिकांश स्वादों में,
[a-Z]एक अवैध चरित्र श्रेणी होने की संभावना है
- क्योंकि
a(97) " Z(90) से अधिक" है
[A-z] कानूनी है, लेकिन इसमें ये छह वर्ण भी शामिल हैं:
[(91), \(92), ](93), ^(94), _(95), `(96)
संबंधित सवाल
[a-z0-9]यह सभी लोअरकेस अक्षर और सभी अंकों से मेल खाता है, लेकिन केवल एक चरित्र के रूप में।