में `(। *) *`, `(। *) +`, `(। +) *` ``। (। +) * `के साथ अजीब समस्या हाल के प्रश्न में बताई गई समस्या को पुन: उत्पन्न करने के लिए - Why does (.*)* make two matches and select nothing in group $1? मैंने कोशिश की *
और +
के विभिन्न संयोजन, ब्रैकेट के अंदर और बाहर, और परिणाम मुझे अपेक्षित नहीं था।जावा रेगेक्स
मैं आउटपुट की अपेक्षा करता था, जैसा कि उस प्रश्न में स्वीकृत उत्तर में समझाया गया था, और एक अन्य डुप्लिकेट प्रश्न में भी, Perl
- Why doesn't the .* consume the entire string in this Perl regex? के तहत टैग किया गया था। लेकिन यह वही व्यवहार नहीं कर रहा है।
यह आसान करने के लिए यहां कोड मैंने कोशिश की है: -
String str = "input";
String[] patterns = { "(.*)*", "(.*)+", "(.+)*", "(.+)+" };
for (String pattern: patterns) {
Matcher matcher = Pattern.compile(pattern).matcher(str);
while (matcher.find()) {
System.out.print("'" + matcher.group(1) + "' : '" + matcher.start() + "'" + "\t");
}
System.out.println();
}
और यह उत्पादन मैं सभी 4 संयोजन के लिए मिल गया है: -
'' : '0' '' : '5' // For `(.*)*`
'' : '0' '' : '5' // For `(.*)+`
'input' : '0' 'null' : '5' // For `(.+)*`
'input' : '0' // For `(.+)+`
अब, मैं क्या कर सकते हैं ' टी समझ में नहीं आता है, क्यों 1st
और 2nd
आउटपुट में, मुझे matcher.find()
के लिए पूरी स्ट्रिंग first result
नहीं मिल रही है। मेरा मतलब है, आदर्श रूप से, पहले मामले में, .*
को पहले संपूर्ण स्ट्रिंग को कैप्चर करना चाहिए, और फिर अंत में empty string
पर कब्जा करना चाहिए। अब, हालांकि यह दूसरे मैच के लिए अपेक्षित परिणाम दे रहा है, यह 1st match
के लिए अच्छा व्यवहार नहीं कर रहा है।
और दूसरे मामले में, मुझे दूसरा मैच भी नहीं मिलना चाहिए, क्योंकि मेरे पास ब्रैकेट के बाहर +
क्वांटिफ़ायर है।
मेरे अपेक्षित आउटपुट है: -
'input' : '0' '' : '5' // For 1st
'input' : '0' // For 2nd
इसके अलावा, 3rd
उत्पादन, मैं क्यों null
2 के बजाय मैच empty string
मिला में? पहले 3 संयोजन के लिए दूसरा मैच समान नहीं होना चाहिए?
चौथा उत्पादन अपेक्षा के अनुसार है। तो, इसमें कोई संदेह नहीं है।
बस एक तरफ नोट: क्या कोई कारण है कि आप रेज़ेक्स के माध्यम से लूप को लूप का उपयोग क्यों नहीं करते हैं? आपका कोड मुझे http://www.codecrap.com –
@ साइमन एंड्रेफोर्सबर्ग से कोड के बारे में याद दिला रहा है। जैसा कि मैंने कहा, मैं सिर्फ पिछले प्रश्न की समस्या का पुनरुत्पादन कर रहा था। यह एक कोड नहीं है जिसका मैं उपयोग करूंगा। तो, मैंने बस इसे जल्दी में कोड किया। मैं सुंदर दिखने के लिए इसे संशोधित कर दूंगा। –
संकेत: पूरे मैच को देखने के लिए 'matcher.group (0)' का प्रयास करें, न केवल पहले कैप्चरिंग समूह। –