/ / जावा में दशमलव संख्या के लिए Regex क्या है? - जावा, रेगेक्स, वास्तविक-संख्या

जावा में दशमलव संख्याओं के लिए रेगेक्स क्या है? - जावा, रेगेक्स, वास्तविक संख्या

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

String regex = "[0-9]*[.]?[0-9]*";
String regex = "[0-9]*["."]?[0-9]*";
String regex = "[0-9]*["."]?[0-9]*";
String regex = "[0-9]*[.]?[0-9]*";
String regex = "[0-9]*[\.]?[0-9]*";
String regex = "[0-9]*.?[0-9]*";
String regex = "[0-9]*.?[0-9]*";
String regex = "[0-9]*\.?[0-9]*";

लेकिन मैं जो चाहता हूं वह वास्तविक है "।" चरित्र ही। किसी को एक विचार है?

मैं वास्तव में क्या करने की कोशिश कर रहा हूं कि एक गैर-नकारात्मक वास्तविक संख्या (दशमलव की अनुमति दी गई) के लिए रेगेक्स लिखना है। इसलिए संभावनाएं हैं: 12.2, 3.7, 2., 0.3, .89, 19।

String regex = "[0-9]*["."]?[0-9]*";
Pattern pattern = Pattern.compile(regex);

String x = "5p4";
Matcher matcher = pattern.matcher(x);
System.out.println(matcher.find());

अंतिम पंक्ति को गलत प्रिंट करना है, लेकिन वैसे भी प्रिंट करना सही है। मुझे लगता है कि मेरा रेगेक्स हालांकि गलत है।

उत्तर:

जवाब के लिए 2 № 1

अद्यतन करें

गैर नकारात्मक दशमलव संख्या से मेल खाने के लिए आपको इस regex की आवश्यकता है:

^d*.d+|d+.d*$

या जावा सिंटैक्स में: "^\d*\.\d+|\d+\.\d*$"

String regex = "^\d*\.\d+|\d+\.\d*$"
String string = "123.43253";

if(string.matches(regex))
System.out.println("true");
else
System.out.println("false");

अपने मूल रेगेक्स प्रयासों के लिए स्पष्टीकरण:

[0-9]*.?[0-9]*

जावा भागने के साथ यह बन जाता है:

"[0-9]*\.?[0-9]*";

यदि आपको डॉट को अनिवार्य रूप से हटाने की आवश्यकता है तो आप उसे हटा दें? निशान:

[0-9]*.[0-9]*

लेकिन यह बिना किसी बिंदु के बस एक डॉट को स्वीकार करेगासंख्या के रूप में अच्छी तरह से ... तो, यदि आप चाहते हैं कि मान्यता का उपयोग करने के लिए संख्या के रूप में अनिवार्य है (जो कि एक या अधिक का उपयोग करें) के बजाय * (जिसका अर्थ शून्य या अधिक है)। यह मामला बनता है:

[0-9]+.[0-9]+

जवाब के लिए 0 № 2

वास्तव में शाब्दिक मिलान करने के 2 तरीके हैं .। एक बैकस्लैश-भागने का उपयोग कर रहा है जैसे आप वहां करते हैं \., और दूसरा तरीका इसे वर्ण वर्ग या वर्ग कोष्ठक के अंदर संलग्न करना है [.]. अधिकांश विशेष वर्ण वर्ग कोष्ठक के अंदर शाब्दिक वर्ण बन जाते हैं समेत .। तो उपयोग करें \. की तुलना में आपका इरादा साफ दिखा [.] यदि आप सभी चाहते हैं तो एक शाब्दिक बिंदु से मेल खाना है .। उपयोग [] अगर आपको कई चीजों से मेल खाना है, जो इसका प्रतिनिधित्व करता है या उदाहरण के लिए यह रेगेक्स [\d.] मतलब एक अंक या एक शाब्दिक बिंदु से मेल खाता है


जवाब के लिए 0 № 3

आपकी प्रारंभिक समझ शायद सही थी, लेकिन उपयोग करते समय आपको फेंक दिया जा रहा था matcher.find(), आपके रेगेक्स को स्ट्रिंग के भीतर पहला वैध मैच मिलेगा, और सब आपके उदाहरण शून्य-लंबाई वाली स्ट्रिंग से मेल खाते हैं।

मै सुझाव दूंगा "^([0-9]+\.?[0-9]*|[0-9]*\.[0-9]+)$"