2010-07-26 12 views
5

क्या किसी को पता है कि मैं एक रेगेक्स द्वारा कहां से आ सकता हूं जो किसी वैध सी # शैली नियमित अभिव्यक्ति से मेल खाता है? क्या यह भी संभव है?रेगेक्स जो किसी भी वैध नियमित अभिव्यक्ति से मेल खाता है

FYI करें, कारण मैं यह करने के लिए कोशिश कर रहा हूँ क्योंकि मैं एक मिनी भाषा है जो इसे के हिस्से के रूप नियमित अभिव्यक्ति की अनुमति देता है वाक्य रचना है है और मैं एक साथ फालतू regex पत्थर मिनी भाषा बयान मान्य करने के लिए, लेकिन यह गलत तरीके से पर विफल रहता है कुछ और जटिल अभिव्यक्तियां। मिनी-भाषा सिंटैक्स को ईबीएनएफ और नियमित अभिव्यक्तियों के संयोजन के माध्यम से परिभाषित किया जाता है। मैं सी # में यह 'सत्यापन' कर सकता हूं लेकिन मुझे लगता है कि यदि यह दृष्टिकोण संभव है, तो यह चिंता का सबसे साफ और सर्वोत्तम अलगाव होगा।

धन्यवाद, ब्रायन

+0

क्या रेगेक्स .NET स्वाद में लिखा जाना चाहिए ...? – kennytm

उत्तर

10

नहीं, आप नहीं कर सकते हैं। कम से कम आम तौर पर नहीं। नियमित अभिव्यक्ति नियमित भाषाओं का वर्णन करती हैं और इनकी विशेषता इस तथ्य से की जाती है कि वे मनमाने ढंग से घोंसला वाले अभिव्यक्तियों को शामिल नहीं कर सकते हैं। तो जैसे

(ab(?:cd)e(fg)) 

कुछ पहले से ही काफी अकेला नियमित अभिव्यक्ति के साथ मान्य करने के लिए असंभव है। जबकि नियमित अभिव्यक्तियों के कुछ स्वाद मैच में रिकर्सिव वंश (उदाहरण के लिए पर्ल, या संतुलित कैप्चर समूह) को कुछ हद तक अनुकरण कर सकते हैं, यह निश्चित रूप से इस नौकरी के लिए आवश्यक टूल नहीं है और आपको इसे shoehorn करने की कोशिश नहीं करनी चाहिए एक में।

क्या आप कर सकते हैं बस एक अभिव्यक्ति संकलित करने का प्रयास करें जिसे आप सत्यापित करना चाहते हैं। यदि पैटर्न अमान्य है तो .NET का नियमित अभिव्यक्ति इंजन अपवाद फेंक देगा:

var compiledRegex = new Regex(someString); 
+0

यह मुझे डर था लेकिन अगर यह एकमात्र विकल्प है तो मुझे लगता है कि मुझे इससे निपटना होगा। स्पष्टीकरण/स्पष्टीकरण के लिए धन्यवाद। –

+0

आवेदन के प्रवाह को नियंत्रित करने के लिए अपवादों का उपयोग करना सबसे अच्छा अभ्यास नहीं है, लेकिन नियमित अभिव्यक्तियों के लिए एक वैधकर्ता लिखना तुच्छ नहीं है। –

+0

अच्छी तरह से लाइन का उपयोग कर "नया रेगेक्स (कुछ स्ट्रिंग);" अनिवार्य रूप से regex मान्य होगा। स्ट्रिंग को सत्यापित किया जा रहा है तकनीकी रूप से उपयोगकर्ता इनपुट है, इसलिए खराब उपयोगकर्ता इनपुट पर अपवाद फँसाना शायद इससे निपटने का सबसे उचित तरीका है। सही? –

संबंधित मुद्दे

 संबंधित मुद्दे