जावा में रेगेक्स ऑप्टिमाइज़ेशन पर एक बहुत अच्छा article पढ़ने के बाद मैं सोच रहा था कि तेज़ और कुशल नियमित अभिव्यक्तियां बनाने के लिए अन्य अच्छी युक्तियां क्या हैं?रेगेक्स प्रदर्शन अनुकूलन युक्तियाँ और चालें
उत्तर
उपयोग किसी भी (डॉट) ऑपरेटर किफ़ायत से, यदि आप इसे किसी अन्य तरीके से कर सकते हैं, यह करना, डॉट हमेशा तुम्हें काट लेगी ...
मैं यकीन नहीं है कि PCRE NFA है नहीं कर रहा हूँ और मैं कर रहा हूँ केवल पीसीआरई से परिचित है, लेकिन + और * आमतौर पर डिफ़ॉल्ट रूप से लालची होते हैं, वे इसे उपयोग के आसपास जितना संभव हो उतना मिलान करेंगे +? तथा *? कम से कम संभव से मिलान करने के लिए, अपने regexp लिखते समय इन दो खंडों को ध्यान में रखें।
नियमित अभिव्यक्ति का उपयोग करने के लिए नहीं जानते - कभी-कभी हाथ कोडित समाधान अधिक कुशल और अधिक समझ में आता है।
उदाहरण: मान लें कि आप एक पूर्णांक से मेल खाना चाहते हैं जो 3 तक समान रूप से विभाजित है। इसे पूरा करने के लिए एक सीमित राज्य मशीन को डिजाइन करना मुश्किल है, और इसलिए एक संबंधित रेगेक्स मौजूद होना चाहिए, लेकिन इसे लिखना इतना छोटा नहीं है - और मुझे यकीन है कि इसे डीबग करना नफरत है!
हां ... लेकिन कुछ संख्यात्मक प्रणालियों में यह मामूली है। :- पी –
आपका मतलब यह है: '((0 | 3 | 6 | 9) | ((1 | 4 | 7) (0 | 3 | 6 | 9) * (2 | 5 | 8))) | (((2 | 5 | 8) | ((1 | 4 | 7) (0 | 3 | 6 | 9) * (1 | 4 | 7))) ((0 | 3 | 6 | 9) | ((2 | 5 | 8) (0 | 3 | 6 | 9) * (1 | 4 | 7))) * ((1 | 4 | 7) | ((2 | 5 | 8) (0 | 3 | 6 | 9) * (2 | 5 | 8))))) * '? (हाँ, मैंने एक डीएफए बनाया और फिर जीएनएफए फिर regex: पी) –
जब आपके पास कोई बैक्रेरेंस नहीं है तो तेज़ कार्यान्वयन का उपयोग करें। https://swtch.com/~rsc/regexp/regexp1.html – clemens
- उपयोग गैर पर कब्जा समूह
(?:pattern)
जब आप एक समूह दोहराने की आवश्यकता है किंतु उसे काटा मूल्य कि एक पारंपरिक(capturing)
समूह से आता है उपयोग करने की आवश्यकता नहीं है। (?>pattern)
लागू होने पर atomic group (या गैर-बैकट्रैकिंग सबएक्सप्रेस) का उपयोग करें।- catastrophic backtracking से बचें, नियमित रूप से गैर-मैचों के लिए समाप्त होने के लिए अपने नियमित अभिव्यक्तियों को डिज़ाइन करके प्लेग की तरह।
मैंने इन तकनीकों का प्रदर्शन करने वाला एक वीडियो बनाया है। मैंने बहुतcatastrophic backtracking आलेख (x+x+)+y
में खराब लिखित नियमित अभिव्यक्ति के साथ शुरू किया। और फिर मैंने ऑप्टिमाइज़ेशन की श्रृंखला के बाद इसे 3 मिलियन गुना तेजी से बनाया, प्रत्येक परिवर्तन के बाद बेंचमार्किंग। वीडियो नेट के लिए विशिष्ट है, लेकिन इन बातों से कई के साथ-साथ अधिकांश अन्य regex जायके पर लागू होते हैं:
- 1. एसक्यूएल सर्वर - समानार्थी सुझाव युक्तियाँ और चालें?
- 2. अनुकूलन युक्तियाँ और चाल
- 3. फ़्लैश प्रतिपादन: अनुकूलन युक्तियाँ और चाल
- 4. प्रदर्शन युक्तियाँ?
- 5. Django प्रदर्शन ट्यूनिंग युक्तियाँ?
- 6. जीडब्ल्यूटी फ्लेक्सटेबल प्रदर्शन और अनुकूलन
- 7. Accessor विधि प्रदर्शन और अनुकूलन
- 8. रेगेक्स अनुकूलन - जावा
- 9. जावा ऑब्जेक्ट सीरियलाइजेशन प्रदर्शन युक्तियाँ
- 10. एक नए सर्वर के लिए SQL सर्वर tempdb अनुकूलन युक्तियाँ?
- 11. क्यूटी प्रशिक्षण युक्तियाँ और चाल
- 12. बिटमैप प्रदर्शन-अनुकूलन पैटर्न
- 13. ओपनसीएल प्रदर्शन अनुकूलन
- 14. धीमी रेगेक्स प्रदर्शन
- 15. युक्तियाँ और WCF
- 16. पसंदीदा SQLPLUS युक्तियाँ और चाल
- 17. विभाजन विधानसभाओं और नामस्थानों पर रणनीति युक्तियाँ
- 18. SQL प्रदर्शन, नेट अनुकूलन बनाम उत्तम आचरण
- 19. MySQL प्रदर्शन अनुकूलन: डेटाटाइम फ़ील्ड द्वारा क्रम
- 20. एक्सकोड युक्तियाँ?
- 21. जावा में रेगेक्स और इंडेक्स की तुलना में इसके प्रदर्शन
- 22. उद्देश्य-सी अनुकूलन
- 23. Magento सीखने की वक्र और सर्वोत्तम युक्तियाँ
- 24. लूप unrolling और अनुकूलन
- 25. सी # अनुकूलन और दुष्प्रभाव
- 26. विधानसभा भाषा और अनुकूलन
- 27. प्रोफाइलिंग और अनुकूलन संकलन
- 28. वोक्सेल इंजन और अनुकूलन
- 29. PHP कोड परिनियोजन युक्तियाँ
- 30. एक्सकोड विंडो संगठन युक्तियाँ?
मैं उल्लेख करने के लिए [बूलियन अनुक्रम] चाहते हैं (https://github.com/NaturalIntelligence/BooleanSequence) जो वर्तमान में आरई के कम प्रतीकों का समर्थन करता है लेकिन वे तेज़ और लचीले और कई उपयोगी सुविधाओं से भरे हुए हैं। आप अधिक सुविधाओं को जोड़ने या उन्हें अधिक तेज़ बनाने के लिए अपने स्वयं के मैचर्स लिख सकते हैं। वे ऑटो ऑप्टिमाइज़ेशन भी करते हैं और आप देख सकते हैं कि जेसन या जेसन आधारित ग्राफ का उपयोग करके उनका मूल्यांकन कैसे किया जाता है। –