मेरे पास एक इनपुट स्ट्रिंग है और मैं यह जांचने के लिए रेगेक्स का उपयोग करना चाहता हूं कि इस स्ट्रिंग में = और $ हैं, उदाहरण:

इनपुट:

name=alice$name=peter$name=angelina

आउटपुट: true

इनपुट:

name=alicename=peter$name=angelina

आउटपुट: false

मेरा रेगेक्स काम नहीं करता है:

Pattern pattern = Pattern.compile("([a-z]*=[0-9]*$])*");
Matcher matcher = pattern.matcher("name=rob$name=bob");
2
Alice Victoria 13 अप्रैल 2020, 19:15

2 जवाब

सबसे बढ़िया उत्तर

.matches() के साथ, आप उपयोग कर सकते हैं

Pattern pattern = Pattern.compile("\\p{Lower}+=\\p{Lower}+(?:\\$\\p{Lower}+=\\p{Lower}+)*"); // With `matches()` to ensure whole string match

विवरण

  • \p{Lower}+ - 1+ लोअरकेस अक्षर (किसी से मेल खाने के लिए \p{L} का उपयोग करें और \p{Alpha} केवल ASCII अक्षरों से मेल खाने के लिए)
  • = - एक = वर्ण
  • \p{Lower}+ - 1+ छोटे अक्षर
  • (?:\\$\\p{Lower}+=\\p{Lower}+)* - 0 या इससे अधिक घटनाएं: <उल>
  • \$ - एक $ चार
  • \p{Lower}+=\p{Lower}+ - 1+ लोअरकेस अक्षर, = और 1+ लोअरकेस अक्षर।

देखें Java डेमो:

List<String> strs = Arrays.asList("name=alice$name=peter$name=angelina", "name=alicename=peter$name=angelina");
Pattern pattern = Pattern.compile("\\p{Lower}+=\\p{Lower}+(?:\\$\\p{Lower}+=\\p{Lower}+)*");
for (String str : strs)
    System.out.println("\"" + str + "\" => " + pattern.matcher(str).matches());

आउटपुट:

"name=alice$name=peter$name=angelina" => true
"name=alicename=peter$name=angelina" => false
2
Wiktor Stribiżew 13 अप्रैल 2020, 19:47

आपके पास अतिरिक्त ] हैं और इसे एक चरित्र के रूप में उपयोग करने के लिए $ से बचने की आवश्यकता है, हालांकि आपको $ के बिना अंतिम पैरामीटर से मिलान करने की भी आवश्यकता है, इसलिए उपयोग करें

([a-z]*=[a-z0-9]*(\$|$))*

[a-z]*= : ए-जेड शून्य या अधिक बार मिलान करें, मिलान = वर्ण

[a-z0-9]*(\$|$): a-z और 0-9, शून्य या अधिक बार मिलान करें, उसके बाद $ वर्ण या मैच का अंत।

([a-z]*=[a-z0-9]*(\$|$))*: जोड़े के शून्य या अधिक अवसरों का मिलान करें।

नोट: सख्त मिलान के लिए * के बजाय + (एक या अधिक मिलान) का उपयोग करें:

([a-z]+=[a-z0-9]+(\$|$))*
1
Pavneet_Singh 13 अप्रैल 2020, 19:31