2011-03-28 12 views
41

मुझे सत्यापन two or one संख्या , या . और फिर two or one संख्याओं के सत्यापन के लिए नियमित अभिव्यक्ति की आवश्यकता है।रेगेक्स केवल संख्याएं और डॉट या कॉमा

तो, ये सही निविष्टियों हैं:

11,11 
11.11 
1.1 
1,1 
+6

[जब regex सवाल पूछ, हमेशा विशिष्ट प्रोग्रामिंग भाषा या उपकरण के लिए टैग को जोड़ने (जैसे, पर्ल, पायथन, या जावा; vi, emacs, या ɢɴᴜ grep; इत्यादि) आप उपयोग कर रहे हैं।] (http://stackoverflow.com/tags/regex/info) – Johnsyweb

उत्तर

58
\d{1,2}[\,\.]{1}\d{1,2} 

संपादित करें: नई आवश्यकताओं (टिप्पणी) को पूरा करने के अद्यतन;)
संपादित करें: ब्रायन

प्रति
^[0-9]{1,2}([,.][0-9]{1,2})?$ 
+0

मुझे खेद है कि मैंने निर्दिष्ट नहीं किया लेकिन,। और इसके बाद की संख्या आवश्यक नहीं है .1 या 11 भी वैध है। – user256034

+5

^[0-9] {1,2} ([,।] {1} [0-9] {1,2})? $ यह 11 11,11 11.11 1.1 से मेल खाएगा और यह 11 से मेल नहीं खाएगा। 11.11.11। और यह पर्ल एल्थो के साथ परीक्षण किया गया है, यह मेरे लिए posix अनुरूप दिखता है, इसलिए इसे अन्य regex इंजन – user237419

+1

के साथ काम करना चाहिए '{1} 'अनावश्यक है। –

10
के रूप में अनावश्यक qtfier को दूर
\d{1,2}[,.]\d{1,2} 

\ डी का मतलब एक अंक है, {1,2} भाग का मतलब पिछले चरित्र का 1 या 2 है (\ d मामला है) और [,।] भाग का मतलब या तो अल्पविराम या बिंदु है।

+0

मुझे खेद है कि मैंने निर्दिष्ट नहीं किया लेकिन,। और इसके बाद की संख्या आवश्यक नहीं है .1 या 11 भी वैध है। – user256034

13

\d का अर्थ अधिकांश भाषाओं में एक अंक है। आप सभी भाषाओं में [0-9] का भी उपयोग कर सकते हैं। "अवधि या अल्पविराम" के लिए [\.,] का उपयोग करें। अपनी भाषा के आधार पर आपको अभिव्यक्ति उद्धृत करने के आधार पर अधिक बैकस्लैश की आवश्यकता हो सकती है। आखिरकार, नियमित अभिव्यक्ति इंजन को एक बैकस्लैश देखने की आवश्यकता होती है।

* का अर्थ है "शून्य-या-अधिक", इसलिए \d* और [0-9]* का अर्थ "शून्य या अधिक संख्याएं" है। ? का मतलब है "शून्य-या-एक"। उन क्वालीफायरों में से कोई भी बिल्कुल सही नहीं है। अधिकांश भाषाओं में आपको {m,n} का अर्थ "एम और एन के बीच" (यानी: {1,2} का अर्थ है "1 और 2 के बीच")

चूंकि डॉट या कॉमा और अतिरिक्त संख्याएं वैकल्पिक हैं, तो आप उन्हें डाल सकते हैं एक समूह में और ? क्वांटिफ़ायर का उपयोग उस समूह के "शून्य-या-एक" के लिए करें।

लाना है कि सभी को एक साथ आप का उपयोग कर सकते हैं:

\d{1,2}([\.,][\d{1,2}])? 

अर्थ, एक या दो अंक \d{1,2}, शून्य या एक एक समूह (...)? एक बिंदु या अल्पविराम से मिलकर की एक या दो संख्याएं आती हैं, जिसके बाद [\.,]\d{1,2}

9

आदेश में एक नियमित अभिव्यक्ति के रूप में एक एकल अंक आप उपयोग कर सकते हैं का प्रतिनिधित्व करने के लिए:

[0-9] या \ घ

आदेश कितनी बार नंबर पर आप जोड़ना होगा प्रतीत होता है निर्दिष्ट करने के लिए में

[0-9] *: स्टार का मतलब शून्य या अधिक अंकों

[0-9] देखते हैं {2}: {एन} का आशय एन अंक

[0-9] {0,2}: {एन, एम} एन अंक या एम अंक

[0-9] {0-9}: {एनएम} एम अंकों के लिए एन अंक।नोट: एम एक अनंत प्रतिनिधित्व

के लिए खाली छोड़ा जा सकता चलें कहते हैं कि मैं 1 से 99 के बीच की एक संख्या मैं जैसे इसे व्यक्त होता प्रतिनिधित्व करना चाहते हैं:

[0-9] {1- 2} या [0-9] {1,2} या \ घ {1-2} या \ घ {1,2}

या कहते हैं कि हम, द्विआधारी प्रदर्शन के साथ काम कर रहे थे एक बाइट आकार को प्रदर्शित करने की सुविधा देता है, हम चाहते हैं कि हमारे अंक 0 और 1 के बीच हों और बाइट आकार की लंबाई 8 हो, इसलिए हम इसे निम्नानुसार प्रस्तुत करेंगे:

[0-1] {8} एक द्विआधारी बाइट

तो फिर तुम एक, या एक जोड़ना चाहते हैं का प्रतिनिधित्व। प्रतीक आप उपयोग करेंगे:

\, या \। या आप उपयोग कर सकते हैं [।] या [,]

तुम भी रूप में इस तरह

संभव मूल्यों के बीच एक चयन कह सकते हैं [।,] का मतलब है या तो एक डॉट या एक अल्पविराम प्रतीक

और आपको केवल टुकड़ों को एक साथ जोड़ना होगा, ऐसे मामले में जहां आप एक या दो अंकों के बाद 1 या 2 अंक संख्या का प्रतिनिधित्व करना चाहते हैं, उसके बाद दो और अंकों के बाद आप इसे निम्नानुसार व्यक्त करेंगे: >

[0-9] {1,2} [।,] \ घ {1-2}

भी ध्यान रखें कि सी ++ तार के अंदर नियमित अभिव्यक्ति तार डबल-बैक-घटा तो हर होना चाहिए \ हो जाता है \\

0

तुम बहुत दयालु होने के लिए चाहते हैं, अल्पविराम या डॉट के साथ आवश्यक केवल दो अंतिम अंक:

^([,.\d]+)([,.]\d{2})$ 
संबंधित मुद्दे