2010-05-25 19 views
5

मैंने regExp को कुछ बार छोड़ दिया है लेकिन अभी भी एक विशेषज्ञ होने से बहुत दूर है। इस बार मैं regExp द्वारा एक सूत्र (या गणित अभिव्यक्ति) को सत्यापित करना चाहता हूं। यहां कठिन हिस्सा फॉर्मूला में उचित प्रारंभिक और समापन कोष्ठक को मान्य करना है।
मेरा मानना ​​है कि वेब पर कुछ नमूना होगा लेकिन मुझे यह नहीं मिला। क्या कोई इस तरह के उदाहरण के लिए एक लिंक पोस्ट कर सकते हैं? या किसी अन्य माध्यम से मेरी मदद करो?RegExp एक सूत्र को सत्यापित करने के लिए (मिलान किए गए कोष्ठक के साथ गणित अभिव्यक्ति)?

उत्तर

5

मिलान किए गए नेस्टेड कोष्ठक वाली भाषा नियमित भाषा नहीं होती है और इसलिए नियमित अभिव्यक्तियों द्वारा पहचाना नहीं जा सकता है। नियमित अभिव्यक्ति के कुछ कार्यान्वयन (उदाहरण के लिए .NET ढांचे में) के पास इस से निपटने के लिए एक्सटेंशन हैं लेकिन यह वास्तव में काम करने में कोई मजेदार नहीं है। तो मैं एक उपलब्ध पार्सर का उपयोग करने या अपने आप को एक सरल पार्सर (मज़े के लिए) लागू करने का सुझाव देता हूं।

.NET कार्यान्वयन में विस्तार के लिए MSDN on balancing groups देखें।

+0

मैं इस RegExp को एक विशेषता के मान को सत्यापित करने के लिए XML स्कीमा में एक पैटर्न के रूप में उपयोग करना था। इस संदर्भ में कोई सुझाव? – WSK

+0

* लेकिन यह वास्तव में काम करने के लिए कोई मजेदार नहीं है * एक अल्पमत है! ऐसे राक्षसों को विच्छेदन करने की कोशिश करना एक दुःस्वप्न है! :) –

+0

यदि आप एक्सएमएल फ़ील्ड से उपलब्ध टूल्स का उपयोग करना चाहते हैं तो आप एक्सएसएलटी का उपयोग करने का प्रयास कर सकते हैं। एक्सएसएलटी एक ट्यूरिंग-पूर्ण भाषा है और इसलिए नौकरी करने में सक्षम है लेकिन मैं वास्तव में यह नहीं बता सकता कि यह कितना प्रयास करेगा और यदि परिणाम कोड का एक अच्छा टुकड़ा होगा। –

3

यदि आपकी गणितीय अभिव्यक्ति में मिलान किए गए नेस्टेड कोष्ठक शामिल हैं, तो यह नियमित व्याकरण नहीं है बल्कि एक संदर्भ मुक्त है और इस तरह, रेगेक्स का उपयोग करके पार्स नहीं किया जा सकता है।

+0

+1 जैसा कि आपने मेरे मुंह से शब्दों को लिया था। हालांकि कोई बैकट्रैकिंग के करीब हो सकता है लेकिन यह सीमित है और यह बिल्कुल स्पष्ट है, एक हैक और एक संकेत जो आप नौकरी के लिए गलत उपकरण का उपयोग कर रहे हैं। –

+0

बेहतर शब्द: * regex कार्यान्वयन का उपयोग करके पार्स नहीं किया जा सकता है * रिकर्सिव मिलान * (पर्ल, PHP और .NET * कर सकते हैं * का समर्थन नहीं कर रहा है)। –

+0

@ बार्ट - उन्होंने भाषा निर्दिष्ट नहीं की है, इसलिए मुझे लगता है कि यह मानक रेगेक्स है, न कि पर्ल के – DVK

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