2011-07-28 23 views
23

मैं जावा एक्सप्रो का उपयोग करके: सही कोड को कैप्चर करने का प्रयास कर रहा हूं, लेकिन निम्न कोड में, मुद्रित कैप्चर समूह पूरी स्ट्रिंग है, क्या गलत है?जावा रेगेक्स कैप्चर समूह

String s ="xyz: 123a-45"; 
String patternStr="xyz:[ \\t]*([\\S ]+)"; 
Pattern p = Pattern.compile(patternStr); 
Matcher m = p.matcher(s); 
//System.err.println(s); 
if(m.find()){ 
    int count = m.groupCount(); 
    System.out.println("group count is "+count); 
    for(int i=0;i<count;i++){ 
     System.out.println(m.group(i)); 
    } 
} 

उत्तर

29

उपसमूहों की संख्या 1, 0 से शुरू होती है पूर्ण पाठ है। बस अपने लूप के साथ गिनती + 1 तक जाओ।

+8

अधिक सटीक, 'for' लूप स्थिति को' i <= count' में बदलें। –

1

ऐसा इसलिए है क्योंकि समूह के सूचकांक 1 से शुरू हो रहे हैं। समूह 0 संपूर्ण पैटर्न है।

जावाडॉक से: "कैप्चरिंग समूह को बाएं से दाएं से अनुक्रमित किया जाता है, एक से शुरू होता है। समूह शून्य पूरे पैटर्न को दर्शाता है, इसलिए अभिव्यक्ति m.group (0) m.group() के बराबर है।" और देखें here

+0

मुझे लगता है कि इस पर भ्रम इस तथ्य से उपजी है कि डॉक्टर ने "इंडेक्सिंग" (हमेशा 0 से) को "नंबरिंग" (जो भी वैल्यू आप पसंद करते हैं) के साथ गड़बड़ कर दिया है। –

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