string - java 6 replaceall replacefirst -


string.replaceall () में उपयोग किए जाने पर निम्नलिखित regex काम करता है, लेकिन string.replaceFirst () के मामले में नहीं।

स्ट्रिंग:

<पूर्व> परीक्षा | एक्स || वाई | जेड ||

अपेक्षित आउटपुट:

  परीक्षा | एक्स | ** STR ** | Y | Z ||  

रेगेक्स:

  string.replaceAll ("(टेस्ट \\ | [\\ | \\ |] * \\\\ |) \\ | \\ | "," $ 1 | एसटी। "); आउटपुट (वांछित नहीं): परीक्षा | एक्स | ** एसटीआर ** | वाई | जेड | ** एसटीआर ** | String.replace पहले ("(टेस्ट \\ | [\\ | \\ | * * \\\\ |) \\ | \\ |", "$ 1 | ST |");  

स्ट्रिंग में कोई परिवर्तन नहीं किया गया है।

कृपया मदद करें!

अग्रिम धन्यवाद।

आपका सवाल बहुत स्पष्ट नहीं है, लेकिन मुझे लगता है कि आप पूछ रहे हैं कि आउटपुट में कोई फर्क क्यों है। रेगेक्स पैटर्न के लिए दो मैच मिलते हैं आप तार में पारित कर दिया तो जब आपने कहा कि प्रतिस्थापित किया गया तो सभी दोनों मैचों को बदल दिया गया था और जब पहली जगह का इस्तेमाल किया जाता है तो केवल पहली बार ही बदल दिया जाता है। इसलिए उत्पादन में अंतर मैचों को खोजने के लिए -

<प्री> आयात करें java.util.regex.Matcher; आयात java.util.regex.Pattern; सार्वजनिक वर्ग रेगेक्स {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {स्ट्रिंग स्ट्रिंग 1 = नया स्ट्रिंग ("टेस्ट | एक्स || वाई | जेड ||"); पैटर्न पैटर्न = Pattern.compile ("(टेस्ट \\ | [\\ | \\ | * * \\\\ |) \\ | \\ |"); Matcher matcher = pattern.matcher (string1); बूलीयन पाया = झूठा; जबकि (matcher.find ()) {System.out.printf ("मैंने पाया है कि पाठ \"% s \ ""% "इंडेक्स% d से शुरू होता है और सूचकांक% d।% N समाप्त होता है, matcher.group () , मैचर। स्टार्ट (), मैचर .ेंड ()); पाया = सच; } अगर ((पाया!) {System.out.printf ("कोई मेल नहीं मिला।% N"); }}}
पर क्लिक करें

Comments