यह इस बात पर निर्भर करता है कि आपको एक नियमित अभिव्यक्ति मिली है या एक regexp: regexps बुराई है, लेकिन नियमित अभिव्यक्ति सुंदरता की चीज है और यह कभी भी आप पर बुराई नहीं करेगी।
Regexp के द्वारा, मेरा मतलब है एक आधुनिक नियमित अभिव्यक्ति: यानी, बैकरेफरेंस जैसे अतिरिक्त आधुनिक सुविधाओं के साथ एक नियमित अभिव्यक्ति - जैसे, एक पर्ल-संगत नियमित अभिव्यक्ति। यह एक औपचारिक भाषाओं / ऑटोमेटा सिद्धांत की पाठ्यपुस्तक से शास्त्रीय नियमित अभिव्यक्ति की तुलना में अधिक शक्तिशाली है, क्योंकि शास्त्रीय नियमित अभिव्यक्तियाँ पीछे की ओर, लुकहैड, लुकहाइंड और इतने पर अनुमति नहीं देती हैं।
शास्त्रीय नियमित अभिव्यक्ति के लिए, यदि आपके पास मिलानकर्ता के लिए अच्छा कार्यान्वयन है, तो कोई भी नियमित अभिव्यक्ति बहुत बुरी नहीं है। विशेष रूप से, मिलान के लिए एक मानक एल्गोरिदम नियमित अभिव्यक्ति को एनएफए में बदलना है और फिर इनपुट स्ट्रिंग पर एनएफए को निष्पादित करना है। इस एल्गोरिथ्म के लिए, क्रैचर स्ट्रिंग का परीक्षण करने के लिए सबसे खराब स्थिति वाला समय ओ ( एन ) है , जब नियमित अभिव्यक्ति तय हो जाती है। इसका मतलब है कि दौड़ने का समय बहुत तेज़ी से नहीं फैल सकता है। कोई स्ट्रिंग नहीं है जो रनिंग टाइम में एक घातीय वृद्धि का कारण बनेगी। इस प्रकार, यदि आप इस एल्गोरिथम का उपयोग करने वाले एक माचिस का उपयोग कर रहे हैं, तो कोई शास्त्रीय नियमित अभिव्यक्ति बुराई नहीं होगी।nओ ( एन )
यह नियमित अभिव्यक्ति मिलानकर्ता के कार्यान्वयन पर निर्भर करता है। यदि आपके पास मिलानकर्ता का एक भोला या खराब कार्यान्वयन है, तो मिलान घातीय समय ले सकता है; निश्चित रूप से उस संपत्ति के साथ एल्गोरिदम हैं। लेकिन इसका सबसे अच्छा जवाब शायद नियमित अभिव्यक्ति को बदलना नहीं है; बेहतर मैचर चुनना शायद बेहतर होगा, यदि आप सेवा के हमलों से इनकार करते हैं।
इसकी तुलना में, कुछ आधुनिक regexps अपरिहार्य रूप से बुराई हैं। यदि आपके पास एक आधुनिक रेगेक्सपी है, तो मिलान के लिए घातीय समय की आवश्यकता हो सकती है। विशेष रूप से, बैकरेफरेंस वाले रेगेक्स एनपी-हार्ड भाषाओं को पहचान सकते हैं। नतीजतन, प्रशंसनीय मान्यताओं के तहत, बुराई रेगेक्स का एक वर्ग मौजूद है जहां एक मैच के लिए परीक्षण घातीय समय लेता है। इस प्रकार, कुछ आधुनिक regexps अनपेक्षित रूप से बुराई हैं: एक समान regexp खोजने के लिए कोई संभव तरीका नहीं है जो मिलान समय में घातीय ब्लूपअप का कारण नहीं होगा।
(इस तरह के समतुल्य अस्तित्व में हो सकते हैं और सिद्धांत में भी खोजने योग्य हो सकते हैं, लेकिन प्रशंसनीय मान्यताओं के तहत, समतुल्य regexp खोजने में घातीय समय लगेगा, जो व्यवहार में संभव नहीं है। यदि आपके पास बहुपद समय में समतुल्य bgexp को खोजने के लिए एक व्यवस्थित प्रक्रिया थी। , तो आप बहुपद समय में एनपी-कठिन समस्या को हल कर सकते हैं, यह साबित करते हुए कि पी = एनपी। यह वहाँ के लिए एक अच्छा regexp मौजूद करने के लिए बहुत अच्छा नहीं है अगर कोई रास्ता नहीं है वास्तव में इसे अपने जीवनकाल के भीतर मिल जाए।)
पृष्ठभूमि और स्रोत: