2013-02-19 36 views
15

सी प्रोग्रामिंग भाषा में पहचानकर्ता को पहचानने के लिए नियमित रूप से परिभाषा के द्वाराका प्रतिनिधित्व करते हुए नियमित अभिव्यक्ति का उपयोग कर पहचानकर्ता

letter -> a|b|...z|A|B|...|Z|_ 
digit -> 0|1|...|9 
identifier -> letter(letter|digit)* 

यह परिभाषा दी गई है

पहचानकर्ता फार्म के पहचानकर्ता उत्पन्न करेगा: [_a-zA-Z][_a-zA-Z0-9]*

मेरा प्रश्न अब यह है कि आप पहचानकर्ता की लंबाई को कैसे सीमित करते हैं जिसे 31 वर्णों से अधिक नहीं बनाया जा सकता है। नियमित परिभाषा में क्या परिवर्तन किए जाने की आवश्यकता है या निर्दिष्ट अभिव्यक्ति से अधिक तक सीमित करने के लिए नियमित अभिव्यक्ति कैसे लिखनी है। क्या कोई मदद कर सकता है। धन्यवाद।

उत्तर

20

नियमित अभिव्यक्ति के लिए आप देख रहे हैं:

[_a-zA-Z][_a-zA-Z0-9]{0,30} 

यह या पत्र एक को रेखांकित से मेल खाएगी Xरेखांकित, द्वारा निम्नलिखित पत्र या संख्या, जहां 0 <= X <= 30

+0

मुझे यह क्षण मिला जब दूसरे दो उपयोगकर्ताओं ने अपने सुझाव दिए ... धन्यवाद वैसे भी। –

+0

@ जेरिसलन ठीक है। सिर्फ मेरे प्रश्न को तब से रखा जब आपने दोनों उत्तरों पर पूछा "एक ही बदलाव लाने के लिए नियमित परिभाषा को बदलने का कोई भी संभावित तरीका"। –

0

लंबाई को सीमित करने के लिए, {} आमतौर पर उपयोग किया जाता है।
उदाहरण के लिए, आपका रेगेक्स [a-zA-Z0-9]+ था। इसका मतलब है, किसी भी अक्षरांकीय मूल्यों की अनुमति देते हैं, और लंबाई से अधिक 1. के बराबर होना चाहिए कि हम इसे 31 वर्णों से अधिक के लिए नहीं सीमित करना चाहते हैं, हम regex पुनर्लेखन कर सकते हैं के रूप में:

[a-zA-Z0-9]{1,31} 

{1,31} को इंगित करता है कि यह 1 के बराबर की लंबाई के अल्फान्यूमेरिक मानों को स्वीकार करेगा और 31 के बराबर से कम होगा।
आप अपने रेगेक्स में संबंधित परिवर्तन कर सकते हैं।

+0

धन्यवाद ... sa के बारे में नियमित परिभाषा को बदलने के लिए कोई संभावित तरीका मैं बदलता हूँ –

+0

@jerisalan मेरा जवाब देखें। –

+4

पहचानकर्ता को अंक से शुरू नहीं होना चाहिए और इसमें '_' शामिल हो सकता है। –