2012-05-09 16 views
7

के लिए Regexp मैं इस regexp "^[0-9]+\.?[0-9]*$") मिल गया है एक डबल नंबर या दृश्य C++ एक पूर्णांक संख्या मैच के लिए, लेकिन यह काम नहीं लगते हैं। कोई विचार।एक डबल

if (System::Text::RegularExpressions::Regex::IsMatch(e0, "^[0-9]+\.?[0-9]*$")) 
      { 
       e0_val = System::Convert::ToDouble(e0); 
      } 
+2

तुम्हें क्या लगता है यह काम नहीं करता हो? एक उदाहरण दें। –

+0

@AndrewLogvinov +1, "गिम्मी तेह codez काम नहीं करता है" एक अच्छा सवाल रूप नहीं है। –

+0

शायद शुरुआत या अंत में व्हाइटस्पेस? क्या आप इसका उपयोग कर रहे कोड को पोस्ट कर सकते हैं? –

उत्तर

9

कहते प्रति regex के साथ गलत कुछ भी नहीं है, यह आपके बचने कि गलती है: यह कैसे मैं कोड लागू कर रहा हूँ। आप \ चरित्र से बचने के बाद से वह भी एक सी ++ स्ट्रिंग एस्केप वर्ण है दोगुना करने की जरूरत है।

Additionaly वहाँ एक बढ़त मामले में जहां इस regex सोच सकता है कि 1. एक मान्य फ़्लोटिंग सूचक संख्या है। तो आप /^[0-9]+(\\.[0-9]+)?$ के साथ बेहतर हो सकते हैं जो उस संभावना को समाप्त करता है।

2

ऊपर regexp के बाद से यह "09" जो एक वैध संख्या नहीं है स्वीकार करता है सही नहीं है। एक बेहतर अभिव्यक्ति होगा:

"^(-?)(0|([1-9][0-9]*))(\\.[0-9]+)?$" 

जहां: "(। \ [0-9] * [1-9])?"

1. is an optional negative sign; 
2. is zero or a valid non-zero integer; 
4. is the optional fracture part; 

सिद्धांत रूप में, अस्थिभंग भाग के रूप में लिखा जाना चाहिए इसके बजाए, क्योंकि किसी संख्या में पूंछ शून्य नहीं होनी चाहिए। व्यवहार में, स्रोत स्ट्रिंग अंक, उदा, की एक निश्चित संख्या के साथ बनाया गया हो सकता है:

printf("%.1f", x); 

तो यह आसानी से एक शून्य वर्ण के साथ समाप्त हो सकता है। और, ज़ाहिर है, ये सभी निश्चित बिंदु प्रतिनिधित्व हैं, न कि खुद को युगल। एक डबल नंबर -1.23e-4 के रूप में लिखा जा सकता है -0.00के बजाय।

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