[संपादित करें: मैं कैप्चर समूहों के बारे में जानकारी है, लेकिन मुख्य समाधान मैं सही नहीं था दे दी है के लिए इस पोस्ट को छोड़ दिया है।
(?:START)((?:[^S]|S[^T]|ST[^A]|STA[^R]|STAR[^T])*)(?:END)
के रूप में टिप्पणी कार्य नहीं करेगा में बताया; मैं भूल गया था कि ध्यान नहीं दिया पात्रों गिरा नहीं किया जा सका है और इस तरह आप कुछ इस तरह के रूप ... |STA(?![^R])|
अभी भी उस चरित्र अंत का हिस्सा बनने के लिए अनुमति देते हैं करने की आवश्यकता होगी, इस प्रकार इस तरह के STARTSTAEND के रूप में कुछ पर विफल रहने; तो यह स्पष्ट रूप से एक बेहतर विकल्प है; निम्नलिखित कैप्चर समूहों का उपयोग करने के लिए उचित तरीका दिखाना चाहिए ...]
कैप्चर समूहों के साथ 'शून्य-चौड़ाई नकारात्मक लुकहेड' ऑपरेटर "?!" का उपयोग करके दिया गया जवाब है: (?:START)((?!.*START).*)(?:END)
जो आंतरिक पाठ को कैप्चर करता है प्रतिस्थापन के लिए $ 1 का उपयोग कर। यदि आप स्टार्ट और ईएनडी टैग कैप्चर करना चाहते हैं तो आप (START)((?!.*START).*)(END)
कर सकते हैं जो ()
एस या ?:
एस जोड़कर/हटाकर $ 1 = START $ 2 = टेक्स्ट और $ 3 = END या कई अन्य क्रमपरिवर्तन देता है।
इस तरह यदि आप इसे खोज और प्रतिस्थापित करने के लिए उपयोग कर रहे हैं, तो आप ऐसा कर सकते हैं, जैसे कि $ $ 1FINISH। इसलिए, यदि आप के साथ शुरू किया:
abcSTARTdefSTARTghiENDjkl
आप कैप्चर समूह 1 के रूप में ghi
प्राप्त होता है, और शुरू $ 1FINISH साथ की जगह आप देना होगा निम्नलिखित:
abcSTARTdefBEGINghiFINISHjkl
जो आप की अनुमति होगी सही ढंग से जोड़े जाने पर ही अपना स्टार्ट/ईएनडी टोकन बदलना।
प्रत्येक (x)
एक समूह है, लेकिन मैंने मध्य में छोड़कर प्रत्येक के लिए (?:x)
रखा है जो इसे गैर-कैप्चरिंग समूह के रूप में चिह्नित करता है; ?:
के बिना मैंने छोड़ा केवल एक ही था; हालांकि, आप BEGIN/END टोकन को भी अनुमानित रूप से कैप्चर कर सकते हैं यदि आप उन्हें चारों ओर ले जाना चाहते हैं या आप क्या हैं।
जावा रेगेक्स पर पूर्ण विवरण के लिए Java regex documentation देखें।
क्या होगा यदि टेक्स्ट 'abcSTARTabcENDabcSTARTabcENDabc' है? क्या आप दोनों मैच चाहते हैं? –
उस बारे में नहीं सोचा था ... वैसे भी, यदि आवश्यक हो तो मुझे दूसरा मैच मिल सकता है। – rrr
एक एकल regex में ऐसा करने के लिए बेहतर है। मैंने एक जवाब जोड़ा है। –