कारण यह है कि आप के बाद एक वैकल्पिक cat
नहीं मिलता है एक अनिच्छा से योग्य .+?
है कि यह दोनों वैकल्पिक और गैर लंगर डाले है: इंजन है कि मैच बनाने के लिए मजबूर नहीं है, क्योंकि यह कानूनी रूप से इलाज कर सकते हैं cat
.+?
अनुक्रम की "पूंछ" के रूप में।
यो स्ट्रिंग के अंत में बिल्ली, यानी ^(dog).+?(cat)?$
का उपयोग लंगर हैं, तो आप एक मैच है, हालांकि मिलेगा:
Pattern p = Pattern.compile("^(dog).+?(cat)?$");
for (String s : new String[] {"dog, cat", "dog, dog, cat", "dog, dog, dog"}) {
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group(1)+" "+m.group(2));
}
}
यह प्रिंट (demo 1)
dog cat
dog cat
dog null
Do बिल्ली के बाद कुछ होने पर आप इससे निपटने के लिए कैसे जानते हैं?
आप इस तरह cat
को छोड़कर एक जटिल काम अभिव्यक्ति है कि कुछ भी मेल खाता है का निर्माण, द्वारा इसके साथ सौदा कर सकते हैं:
^(dog)(?:[^c]|c[^a]|ca[^t])+(cat)?
अब cat
एक लंगर (demo 2) के बिना स्ट्रिंग में कहीं भी हो सकता है।
धन्यवाद। बिल्ली के बाद कुछ होने पर क्या आप जानते हैं कि इससे कैसे निपटें? उदाहरण के लिए: 'कुत्ता, कुत्ता, बिल्ली, ब्लाह'। मैं केवल पहले कुत्ते और वैकल्पिक बिल्ली को पकड़ना चाहता हूं (वहां एक बिल्ली पर हो सकता है)। – forsajt
यह उत्तर देखना अच्छा लगेगा –