यही आपके प्रश्न का उत्तर नहीं है, लेकिन उम्मीद है कि एक छोटे से बताता है कि क्यों एक सरल जवाब मिलना मुश्किल है:
पहले, शब्द 'regex' थोड़ा संदिग्ध है, इसलिए केवल स्पष्ट करने के लिए, हम है:
- "सख्त" नियमित अभिव्यक्तियां, जो निर्धारिती परिमित automatons (DFAs) के बराबर होती हैं।
- पर्ल-संगत नियमित अभिव्यक्ति (पीसीआरई), जो घड़ियों और सीटों जैसे गुच्छे, बैकरेन्फर इत्यादि का एक गुच्छा जोड़ते हैं। इन्हें अन्य भाषाओं में भी पाइथन और जावा जैसे कार्यान्वित किया जाता है।
- वास्तविक पर्ल नियमित अभिव्यक्तियां, जो
?{...}
निर्माण के माध्यम से मनमाने ढंग से पर्ल कोड सहित और भी पागल हो सकती हैं।
मुझे लगता है कि यह समस्या सख्त नियमित अभिव्यक्तियों के लिए हल करने योग्य है। आप केवल संबंधित डीएफए का निर्माण करते हैं और उस ग्राफ को खोजते हैं कि यह देखने के लिए कि क्या एक स्वीकार्य स्थिति का कोई पथ है या नहीं। लेकिन यह 'असली दुनिया' regex के लिए मदद नहीं करता है, जो आमतौर पर पीसीआरई है।
मुझे नहीं लगता कि पीसीआरई ट्यूरिंग-पूर्ण है (हालांकि मुझे नहीं पता - यह प्रश्न भी देखें: Are Perl regexes turing complete?)। अगर ऐसा होता, तो मुझे लगता है कि जिम गैरीसन ने टिप्पणी की थी, यह मूल रूप से रोकथाम की समस्या है। यह कहा गया है कि, उन्हें उपरोक्त विधि को बेकार बनाने के लिए, उन्हें डीएफए में बदलने में आसान नहीं है ...
मेरे पास पीसीआरई के लिए कोई जवाब नहीं है, लेकिन ध्यान रखें कि उपर्युक्त संरचनाएं (बैकरेरेंस, आदि) मैं इसे बहुत कठिन बना दूंगा, मुझे कल्पना है। हालांकि मैं "असंभव" कहने में संकोच करता हूं।
?{...}
के साथ एक वास्तविक पर्ल रेगेक्स निश्चित रूप से ट्यूरिंग-पूर्ण है, इसलिए ड्रैगन हैं, और मुझे लगता है कि आप भाग्य से बाहर हैं।
मेरा मानना है कि यह [हलिंग समस्या] (http://en.wikipedia.org/wiki/Halting_problem) के बराबर है। यह निर्धारित करने के लिए एक एल्गोरिदम लिखना संभव नहीं हो सकता है कि क्या एक मनमानी रेगेक्स '। *' –
के बराबर है, लुकराउंड और बैकफ्रेज़ के साथ रेगेक्स, लेकिन कोई कोड इंटरपोलेशन, संदर्भ संवेदनशील व्याकरण के उप-समूह या बराबर होना चाहिए। इन भाषाओं का निर्णय करना पूर्ण नहीं है, इसलिए यह प्रश्न रोकथाम की समस्या के बराबर नहीं होना चाहिए। * यदि *, एक सीएसजी दिया गया है, तो हम नियमों को प्रतिस्थापित करके इस भाषा की एक स्ट्रिंग का उत्पादन कर सकते हैं, फिर हम एक प्रतिबंधित प्रतिस्थापन लागू कर सकते हैं, इस प्रकार एक ऐसी स्ट्रिंग का उत्पादन कर सकते हैं जो हमारी भाषा में नहीं है। अफसोस की बात है कि मुझे नहीं पता कि यह मामला है, और मैं इसका सबूत स्केच करने में सक्षम नहीं हूं। – amon
इसे "खालीपन समस्या" कहा जाता है, और डीएफए/एनएफए (यानी बैक्रेरेंस/लुकराउंड के बिना रेगेक्स) के लिए डिकिडेबल है http://www.cs.miami.edu/~ogihara/csc527/new04-1.pdf के लिए बैकफ्रेज़ (संदर्भ संवेदनशील व्याकरण) के साथ regexes, खालीपन समस्या अपरिहार्य है।(मुझे अभी कोई सबूत नहीं मिल रहा है, लेकिन साहित्य में इसका अक्सर उल्लेख किया जाता है) – rmmh