मैं पिछले सप्ताह कुछ यूनिट परीक्षणों को कोड के एक टुकड़े के लिए लिख रहा था जो कुछ एसक्यूएल स्टेटमेंट उत्पन्न करता था।सामान्य एसक्यूएल वाक्यविन्यास से मेल खाने के लिए नियमित अभिव्यक्ति?
मैं SELECT, INSERT और अद्यतन वाक्यविन्यास से मेल खाने के लिए एक रेगेक्स को समझने की कोशिश कर रहा था, इसलिए मैं सत्यापित कर सकता था कि मेरी विधियां वैध एसक्यूएल उत्पन्न कर रही थीं, और विभिन्न रेगेक्स संपादकों के साथ खोज और गड़बड़ी के 3-4 घंटे बाद मैंने छोड़ दिया ।
मैं आंशिक मिलान पाने में कामयाब रहे, लेकिन क्योंकि उद्धरण में एक वर्ग किसी भी वर्ण हो सकते हैं इसे जल्दी पूरे बयान मैच के लिए फैलता है।
किसी भी मदद की सराहना की जाएगी किया, मैं नियमित अभिव्यक्ति के साथ बहुत अच्छा नहीं कर रहा हूँ, लेकिन मैं उनके बारे में अधिक जानकारी चाहते हैं।
वैसे यह सी # regex है कि मैं के बाद हूँ।
स्पष्टीकरण
मैं न एक डेटाबेस के लिए उपयोग की जरूरत के रूप में यह एक यूनिट परीक्षण का हिस्सा है और मैं अपने कोड का परीक्षण करने के लिए एक डेटाबेस बनाए रखने के लिए है करने के लिए wan't नहीं करना चाहती। जो परियोजना से अधिक समय तक जीवित रह सकता है।
सहमत हुए। Regexp के अलावा अन्य कुछ दृष्टिकोण की आवश्यकता है। किसी चयनित कथन के लिए कानूनी वाक्यविन्यास से मिलान करने का कोई तरीका नहीं है: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF01702 –
सहमत हैं। असल में, आपको एक एसक्यूएल पार्सर चाहिए। यहां एक आलेख दिखाया गया है कि सामान्य एसक्यूएल पार्सर की सहायता से विक्रेता-विशिष्ट ऑफ़लाइन एसक्यूएल सिंटैक्स चेक कैसे करें: http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use- सामान्य -एसक्ल-पार्सर/विक्रेता-विशिष्ट-ऑफलाइन-एसक्यूएल-सिंटैक्स-चेक/ –
किसी भी संदर्भ मुक्त व्याकरण को आधुनिक नियमित अभिव्यक्तियों द्वारा पार्स किया जा सकता है। नियमित अभिव्यक्तियों को नियमित भाषाओं को पार्स करने के लिए अब तक सीमित नहीं हैं। यदि यह सत्य था, तो भाषा '{a^nb^n}' पारदर्शी नहीं होगी, हालांकि इसे नियमित अभिव्यक्ति '/^(ए (\ 1)? बी) $/'द्वारा पार्स किया जा सकता है। अधिक जानकारी के लिए https://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html देखें। – Jack