क्या इसके लायक है के लिए
, यहाँ एक छोटे से अधिक संदर्भ है:
नियमित अभिव्यक्ति कहा जाता है "नियमित" क्योंकि वे नियमित व्याकरण के साथ जुड़े रहे हैं, और नियमित व्याकरण का वर्णन नहीं कर सकते हैं (एक असीमित संख्या) नेस्ट कोष्ठकों (वे यादृच्छिक कोष्ठक के गुच्छा का वर्णन कर सकते हैं, लेकिन उन्हें साफ जोड़े में मिलान नहीं कर सकते हैं)।
यह समझने का एक तरीका यह है कि नियमित अभिव्यक्तियां (कुछ विवरणों को संशोधित कर सकते हैं जिन्हें मैं अंत में समझाऊंगा) निर्धारिती परिमित automatons में परिवर्तित हो सकते हैं। जो भयभीत लगता है लेकिन वास्तव में इसका मतलब है कि उन्हें "नियम" की सूचियों में परिवर्तित किया जा सकता है, जहां नियम आपके द्वारा मिलान किए गए कार्यों पर निर्भर करते हैं, और वर्णन करते हैं कि आप क्या मिलान कर सकते हैं।
उदाहरण के लिए, नियमित अभिव्यक्ति ab*c
में बदला जा सकता: शुरू में
, आप केवल a
मिलान कर सकते हैं। तो 2.
के पास जाओ अब, आप b
मिलान कर सकते हैं और 2 के लिए वापस जाओ, या मैच c
और 3
कार्य पूरा हो जाने के लिए जाना! मैच एक सफलता थी!
और यह एक "निर्धारक परिमित automaton" है।
वैसे भी, इसका दिलचस्प हिस्सा यह है कि यदि आप बैठते हैं और ब्रांड्स के जोड़ों के मिलान के लिए ऐसा कुछ करने की कोशिश करते हैं तो आप नहीं कर सकते! कोशिश करो। आप अधिक से अधिक नियम बनाकर एक सीमित संख्या से मेल खा सकते हैं, लेकिन आप नियमों का एक सामान्य सेट नहीं लिख सकते हैं जो असीमित संख्या में ब्रांड्स से मेल खाते हैं (मुझे यह जोड़ना चाहिए कि नियमों का होना चाहिए "यदि आप एक्स से मेल खाते हैं वाई के लिए ")।
अब स्पष्ट रूप से आप इसे विभिन्न तरीकों से संशोधित कर सकते हैं। आप अधिक जटिल नियमों की अनुमति दे सकते हैं (जैसे उन्हें आपको कोष्ठक की गिनती रखने के लिए विस्तारित करना), और फिर आप कुछ ऐसा प्राप्त कर सकते हैं जो आप उम्मीद करते हैं। लेकिन यह एक नियमित व्याकरण नहीं होगा।
यह देखते हुए कि नियमित अभिव्यक्ति इस तरह से सीमित हैं, वे कुछ और जटिल के बजाय क्यों उपयोग किए जाते हैं? यह पता चला है कि वे एक मीठे स्थान के कुछ हैं - वे काफी सरल और कुशल रहते हुए बहुत कुछ कर सकते हैं। अधिक जटिल व्याकरण (नियमों के प्रकार) अधिक शक्तिशाली हो सकते हैं, लेकिन कार्यान्वित करने के लिए भी कठिन हैं, और दक्षता के साथ और अधिक समस्याएं हैं।
अंतिम अस्वीकरण और अतिरिक्त विवरण का वादा किया: व्यावहारिक रूप से इन दिनों वास्तव में इस से अधिक शक्तिशाली हैं (और वास्तव में "नियमित अभिव्यक्ति" नहीं कहा जाना चाहिए)। लेकिन उपर्युक्त अभी भी मूलभूत स्पष्टीकरण है कि आपको इसके लिए regexp का उपयोग क्यों नहीं करना चाहिए।
ps जेसे का सुझाया गया समाधान कई बार regexp का उपयोग करके इसे गोल करता है; यहां तर्क regexp के एक ही उपयोग के लिए है।
पार्सर .......... –
['आर" \ (। + \) "' मिलान करता है।] (Http://ideone.com/oJQjV) – Amber