2010-05-25 25 views
6

क्या यह पता लगाना संभव है कि कोई नियमित स्ट्रिंग नियमित अभिव्यक्ति का उपयोग करके नियमित रूप से नियमित अभिव्यक्ति है या नहीं?क्या regexp होना संभव है जो सभी मान्य नियमित अभिव्यक्तियों से मेल खाता है?

कहें कि मेरे पास कुछ तार हैं, जो वैध नियमित अभिव्यक्ति हो सकते हैं या नहीं भी हो सकते हैं। मैं नियमित रूप से अभिव्यक्ति के अनुरूप उन स्ट्रिंग से मेल खाता नियमित अभिव्यक्ति चाहता हूं। क्या यह संभव है? या क्या इसका पता लगाने के लिए मैंने कुछ उच्च स्तरीय व्याकरण (यानी संदर्भ मुक्त भाषा) का उपयोग किया है? क्या यह प्रभावित करता है अगर मैं पर्ल regexps जैसे regexps के कुछ विस्तारित संस्करण का उपयोग कर रहा हूँ?

यदि यह संभव है, तो regexp मिलान regexp क्या है?

+0

संभव डुप्लिकेट वहाँ पता लगाने के लिए एक नियमित अभिव्यक्ति है एक वैध नियमित अभिव्यक्ति?] (http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a- valid-regular-expression) – outis

उत्तर

8

नहीं, यह संभव नहीं है। ऐसा इसलिए है क्योंकि वैध नियमित अभिव्यक्तियों में समूहकरण शामिल होता है, जिसके लिए संतुलित कोष्ठक की आवश्यकता होती है।

संतुलित डिलीमीटरों को नियमित अभिव्यक्ति से मेल नहीं किया जा सकता है; इसके बजाय उन्हें context-free grammar से मेल खाना चाहिए। (संतुलित कोष्ठकों के साथ उस लेख सौदों पर first example।)

+0

ठीक है, यह सामान्य नियमित अभिव्यक्तियों के साथ सच है पर्ल रेगेक्स जैसे कुछ के बारे में कैसे? –

+0

@ जुहा सिरजला: असल में, मैं विशेष रूप से पर्ल रेगेक्स के बारे में सोच रहा था। ग्रुपिंग कोष्ठक को रेगेक्स के साथ मेल नहीं किया जा सकता है, जैसा कि मैंने समझाया है। –

+0

पीसीआरई और .NET संतुलन से मेल खाने के लिए नियमित अभिव्यक्तियों का विस्तार भी करते हैं उपसमूह। पर्ल 6 नियमों के साथ regexes फैलता है जो इसे सक्षम भी करता है। लेकिन अब तक विवरण "नियमित अभिव्यक्ति" अब सटीक नहीं है। असल में, आज जो कुछ "नियमित अभिव्यक्ति" द्वारा समझा जाता है, वह नियमित रूप से नियमित नहीं होता है। –

1

एक उत्कृष्ट लेख यहां देखें:

Regular expression for regular expressions?

जवाब यह है कि regexes नहीं एक नियमित व्याकरण का उपयोग कर लिखा जाता है, लेकिन एक संदर्भ- मुफ्त एक।

0

यदि आपका प्रश्न "सभी वैध नियमित अभिव्यक्तियों से मेल खाता है", तो उत्तर (शायद आश्चर्यजनक रूप से) 'हाँ' है। नियमित अभिव्यक्ति .* सभी मान्य (और गैर-वैध) नियमित अभिव्यक्तियों से मेल खाती है, लेकिन यह निर्धारित करने के लिए कि आप वैध मान रहे हैं, यह बहुत बेकार है।

लेकिन, जैसा कि सवाल यह है कि "सभी और वैध नियमित अभिव्यक्ति से मेल", जवाब है (जैसा कि DVK और प्लेटिनम Azure "ने कहा है कि 'नहीं'।

की [