का उपयोग कर इन-प्लेस रेगेक्स प्रतिस्थापन मेरे पास 'टेक्स्ट' नामक std :: स्ट्रिंग में संग्रहीत टेक्स्ट का एक बड़ा अनुच्छेद है। इस स्ट्रिंग पर, मैं बूस्ट रेगेक्स लाइब्रेरी का उपयोग करके कुछ पैटर्न को एक सफेद स्थान के साथ बदल रहा हूं। मेरा कोड यहाँ है।बूस्ट
// Remove times of the form (00:33) and (1:33)
boost::regex rgx("\\([0-9.:]*\\)");
text = boost::regex_replace(text, rgx, " ");
// Remove single word HTML tags
rgx.set_expression("<[a-zA-Z/]*>");
text = boost::regex_replace(text, rgx, " ");
// Remove comments like [pause], [laugh]
rgx.set_expression("\\[[a-zA-Z]* *[a-zA-Z]*\\]");
text = boost::regex_replace(text, rgx, " ");
// Remove comments of the form <...>
rgx.set_expression("<.+?>");
text = boost::regex_replace(text, rgx, " ");
// Remove comments of the form {...}
rgx.set_expression("\\{.+?\\}");
text = boost::regex_replace(text, rgx, " ");
// Remove comments of the form [...]
rgx.set_expression("\\[.+?\\]");
text = boost::regex_replace(text, rgx, " ");
मेरी समझ से, हर बार जब मैं regex_replace फ़ंक्शन चलाता हूं, तो यह एक नई स्ट्रिंग बनाता है और आउटपुट लिखता है। यदि मैं regex_replace फ़ंक्शन को एन अलग-अलग पैटर्न के साथ चलाता हूं, तो यह एन नए तारों को आवंटित करेगा (पुराने लोगों को हटा देगा)।
चूंकि स्मृति आवंटन समय लेने वाला है, क्या नई स्ट्रिंग आवंटित किए बिना 'इन-प्लेस' प्रतिस्थापन करने का कोई तरीका है?
धन्यवाद, मुझे लगता है कि यह करेगा। –
चेतावनी: जब परिणाम स्वरूपक एक अलग लंबाई स्ट्रिंग के साथ मैच को प्रतिस्थापित करता है तो परिणाम संभवतः अपरिभाषित होता है। (!!!) (प्रलेखन अलियाड/ओवरलैपिंग इनपुट/आउटपुट श्रेणियों के बारे में कुछ भी नहीं कहता है) – sehe