2012-03-16 14 views
6

क्या मुझे हाथों से सभी मामलों से निपटने के लिए एक जटिल RegEx बनाना चाहिए या क्या मुझे एकाधिक रेगेक्स में एक जटिल RegEx तोड़ना चाहिए?क्या मुझे एक जटिल RegEx या एकाधिक और कम जटिल बनाना चाहिए?

मैं जटिल रेगेक्स का उपयोग करके प्रदर्शन से संबंधित हूं। जटिल रेगेक्स को छोटे सरल रेगेक्स में तोड़ने से बेहतर प्रदर्शन होगा?

+2

शुद्ध प्रदर्शन के मामले में, बहुत सी चीजों पर निर्भर करता है। लेकिन पठनीयता और रखरखाव के मामले में, लघु regexes का संयोजन अनिवार्य रूप से बेहतर है। – bdares

उत्तर

2

मुझे नहीं लगता कि कंपाइलर अनुकूलन के कारण अब बहुत अंतर आएगा, हालांकि, एक साधारण का उपयोग करके आपके कोड को आसान बना दिया जाएगा जिससे बदले में रखरखाव आसान हो जाएगा।

3

यदि आप प्रदर्शन प्रश्न का सार्थक उत्तर चाहते हैं, तो आपको दोनों मामलों को बेंचमार्क करना होगा।

पठनीयता/रखरखाव के संबंध में, आप किसी भी भाषा में अपठनीय कोड लिख सकते हैं और इसलिए आप नियमित अभिव्यक्तियों के साथ कर सकते हैं। यदि आप एक बड़ा लिखते हैं, तो x संशोधक (IgnorePatternWhitespace सी # में) का उपयोग करना सुनिश्चित करें और अपने रेगेक्स को बनाने के लिए टिप्पणियों का उपयोग करें। c# में मेरे पिछले उत्तरों में से एक से

एक अनियमित रूप से चुने उदाहरण:

MatchCollection result = Regex.Matches 
    (testingString, 
     @"  
      (?<=\$) # Ensure there is a $ before the string 
      [^|]* # Match any character that is not a | 
      (?=\|) #Till a | is ahead 
     " 
     , RegexOptions.IgnorePatternWhitespace); 
+0

मेरे ब्लॉग पोस्ट पर भी एक नज़र डालें: [क्या आप पठनीय regexes लिखते हैं?] (Http://blog.xisb.de/?p=57), जहां मैं 'RegexOptions.IgnorePatternWhitespace' का उपयोग करने के बारे में कुछ और विवरण प्रदान करता हूं। – stema

-1

परिसर नियमित अभिव्यक्ति बहुत धीमी हो सकती है, लेकिन यह आपके रेगुलर एक्सप्रेशन और आपके वातावरण पर निर्भर करता है। String.trim() का मामला लें। इसे नियमित रूप से अभिव्यक्तियों के साथ कार्यान्वित किया जा सकता है। आप एक रेगेक्स या दो का उपयोग कर सकते हैं (फ्रंट और बैक व्हाइटस्पेस को अलग से हटाएं)। यहां कोई ऐसा व्यक्ति है जिसने 11 अलग-अलग जावास्क्रिप्ट ट्रिम कार्यान्वयन किए और उन्हें विभिन्न ब्राउज़रों में बेंचमार्क किया: http://blog.stevenlevithan.com/archives/faster-trim-javascript। उस स्थिति में, ज्यादातर स्थितियों में एक रेगेक्स बड़ा समय खो देता है।

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