जब एक एकल उदाहरण के संदर्भ में प्रश्न पूछे जाते हैं तो अस्पष्टता अनिवार्य रूप से मौजूद होती है। यह सवाल कोई अपवाद नहीं है।
प्रश्न में दिए गए उदाहरण के लिए वांछित स्ट्रिंग स्पष्ट है:
super example of string key : text I want to keep - end of my string
^^^^^^^^^^^^^^^^^^^
हालाँकि, यह स्ट्रिंग है, लेकिन स्ट्रिंग्स और बाउंड्री स्ट्रिंग्स का एक उदाहरण है जिसके लिए कुछ निश्चित पदार्थों की पहचान की जानी है। मैं जेनेरिक बाउंड्री स्ट्रिंग्स के साथ एक सामान्य स्ट्रिंग पर विचार करूंगा, जो निम्नानुसार है।
abc FF def PP ghi,PP jkl,FF mno PP pqr FF,stu FF vwx,PP yza
^^^^^^^^^^^^ ^^^^^
PPहै पूर्ववर्ती स्ट्रिंग , FFनिम्न स्ट्रिंग है और पार्टी टोपियाँ से संकेत मिलता है जो सबस्ट्रिंग मिलान किया जा रहे हैं। (प्रश्न में दिए गए उदाहरण में key : पूर्ववर्ती स्ट्रिंग है और -निम्न स्ट्रिंग है।) मुझे लगता है कि मान लिया है PPऔर FFपहले और शब्द सीमाओं के बाद (ताकि कर रहे हैं PPAऔर FF8मेल नहीं खाते हैं)।
पार्टी की टोपियों से परिलक्षित मेरी धारणाएँ इस प्रकार हैं:
- पहला सबस्ट्रिंग
PPएक (या अधिक) FFसबस्ट्रिंग से पहले हो सकता है , जो यदि मौजूद है, तो अवहेलना की जाती है;
- यदि सामने आने से पहले
PPएक या अधिक PPएस द्वारा पीछा किया जाता FFहै, तो निम्नलिखित PPएस पूर्ववर्ती और निम्नलिखित तारों के बीच प्रतिस्थापन का हिस्सा हैं;
- यदि मुठभेड़ से पहले
PPएक या अधिक FFएस द्वारा पीछा किया जाता PPहै, तो पहले FFनिम्नलिखित PPको निम्नलिखित स्ट्रिंग माना जाता है।
ध्यान दें कि यहां बहुत से उत्तर फॉर्म के केवल तारों से संबंधित हैं
abc PP def FF ghi
^^^^^
या
abc PP def FF ghi PP jkl FF mno
^^^^^ ^^^^^
एक नियमित अभिव्यक्ति का उपयोग कर सकता है, कोड निर्माण, या ब्याज के सबस्ट्रिंग की पहचान करने के लिए दो का एक संयोजन। मैं कोई निर्णय नहीं लेता कि कौन सा दृष्टिकोण सबसे अच्छा है। मैं केवल निम्नलिखित नियमित अभिव्यक्ति प्रस्तुत करूंगा जो ब्याज के सबस्ट्रिंग से मेल खाएगी।
(?<=\bPP\b)(?:(?!\bFF\b).)*(?=\bFF\b)
अपना इंजन शुरू करो! 1
मैंने इसे PCRE (PHP) regex इंजन के साथ परीक्षण किया, लेकिन जैसा कि regex बिल्कुल विदेशी नहीं है, मुझे यकीन है कि यह .NET regex इंजन (जो बहुत मजबूत है) के साथ काम करेगा।
रेगेक्स इंजन निम्नलिखित परिचालन करता है:
(?<= : begin a positive lookbehind
\bPP\b : match 'PP'
) : end positive lookbehind
(?: : begin a non-capture group
(?! : begin a negative lookahead
\bFF\b : match 'FF'
) : end negative lookahead
. : match any character
) : end non-capture group
* : execute non-capture group 0+ times
(?= : begin positive lookahead
\bFF\b : match 'FF'
) : end positive lookahead
इस तकनीक को एक बार में एक वर्ण से मेल खाते हुए, पूर्ववर्ती स्ट्रिंग का अनुसरण करते हुए, जब तक कि चरित्र है Fऔर उसके बाद F(या आमतौर पर, चरित्र को निम्नलिखित स्ट्रिंग का गठन करने वाला स्ट्रिंग बनाता है), टेम्पर्ड लालची टोकन समाधान कहा जाता है ।
स्वाभाविक रूप से, अगर मैं ऊपर बताई गई धारणाओं को बदल दिया जाता है, तो रेगेक्स को संशोधित करना होगा (यदि संभव हो तो)।
1. विस्तृत विवरण के लिए कर्सर को चारों ओर ले जाएं।
substringऔरindexof