पर विचार करें निम्न स्ट्रिंग की जगह:RegEx के माध्यम से लूपिंग से मेल खाता है और वर्तमान मैच
वह anchovies के साथ एक पिज्जा का आदेश दिया। दुर्भाग्यवश, वह वह चीज़ नहीं थी जिसे वह चाहता था। इसके अलावा, मशरूम, पेपरोनी और एन्कोवीज़ के साथ पिज्जा सामान्य पिज्जा से एन्कोवियों के मुकाबले काफी बेहतर है।
मान लें कि आपको pizza with (ingredients)
को pizza with (ingredients) on a thin crust
में बदलने की आवश्यकता है।
कि ऐसा करने के लिए, मैं एक Regex स्थापित किया था:
(?i:pizza with [a-zA-Z,\s]*?anchovies)
यह तीन मैचों में कैप्चर करता है। फिर, मैं निम्नलिखित कोड का उपयोग कर प्रत्येक मैच के लिए on a thin crust
जोड़ने के लिए आगे बढ़ना:
Pattern p = Pattern.compile("(?i:pizza with [a-zA-Z,\s]*?anchovies)");
Matcher m = p.matcher(string);
while(m.find())
{
string = string.replace(m.group(), m.group() + "on a thin crust.");
}
इस के उत्पादन में तो होगा:
वह एक पतली पर एक पतली परत पर anchovies के साथ एक पिज्जा का आदेश दिया पपड़ी। दुर्भाग्यवश, वह वह चीज़ नहीं थी जिसे वह चाहता था। इसके अलावा, मशरूम, पेपरोनी और एन्कोवीज़ के साथ पिज्जा सामान्य पिज्जा से पतली परत पर पतली परत पर एन्कोवियों के साथ काफी बेहतर होता है।
क्या हुआ:
पहला मैच pizza with anchovies
आखिरी मैच के समान है। इसलिए, String.replace
का उपयोग करके पहला और अंतिम मैच pizza with anchovies on a thin crust
में बदल गया। चूंकि, हम सभी मैचों के माध्यम से लूपिंग कर रहे हैं, अंतिम मैच अभी भी होगा और प्रतिस्थापन समारोह पहले मैच को भी बदल देगा (क्योंकि पहला मैच और अंतिम मैच समान है)। इसलिए, हमें डबल on a thin crust
मिलता है।
प्रश्न:
वहाँ एक रास्ता केवल वर्तमान मैच में एक रेगुलर एक्सप्रेशन से मेल को बदलने के लिए है?
यदि आपको मेरा उत्तर उपयोगी/आपके लिए काम मिल रहा है, तो कृपया ऊपर उठाने/स्वीकार करने पर विचार करें। –