विशालकाय regexes काफी धीमी और स्मृति भूखा हो सकता है। मुझे पता है, क्योंकि मैंने एक बनाया है। यह एक regex द्वारा टोकननाइज़ नहीं किया जाना चाहिए टोकननाइज़ कर सकते हैं। :-) यदि आप एक लिंक चाहते हैं ... अब ... मैंने कभी "छोटे" regexes बेंचमार्क नहीं किया है, इसलिए मैं उनकी गति नहीं जानता। वे निश्चित रूप से लिखने के लिए कॉम्पैक्ट हैं।
आह मैं भूल रहा था, regexes ईविल हैं। उनकी मुख्य समस्या यह है कि वे एक हथौड़ा की तरह हैं और जब आप उन्हें रखते हैं, तो आप सभी समस्याओं को नाखून की तरह बनाने की कोशिश करते हैं। तो उनकी मुख्य समस्या उपयोगकर्ता (प्रोग्रामर) में है।
पहली "बड़ी" सीमा: जावास्क्रिप्ट केवल उनमें से एक सबसेट लागू करता है, बिना यूनिकोड समर्थन के। आम तौर पर जिस भाषा का आप सर्वर पक्ष का उपयोग करते हैं, उसका पूरा कार्यान्वयन होता है, इसलिए आप जेएस द्वारा सीमित हो जाते हैं। यहां तक कि .NET की तरह पूर्ण कार्यान्वयन भी बड़ी सीमाएं हैं: सरोगेट जोड़े के लिए कोई समर्थन नहीं है और "रचना" वर्णों के लिए कोई समर्थन नहीं है (वर्ण जो संयोजन संयोजन का उपयोग करते हैं)। लेकिन, हमेशा के रूप में, समस्या प्रोग्रामर में है। यूनिकोड को कितने प्रोग्रामर जानते हैं, जो अंक के विभिन्न सेटों के यूनिकोड की जटिलताओं को जानते हैं?
दूसरा "बड़ा" सीमा: रखरखाव। जब वे लिखे जाते हैं तो वे जटिल और अपठनीय होते हैं। लेकिन महीनों बाद? वे बदतर हो जाते हैं! और यदि आपको एक नया प्रोग्रामर प्रशिक्षित करना है, तो अब उसे एक और भाषा सीखनी है: regex।
तीसरा "बड़ा" सीमा: वे बहुत अधिक छुपाते हैं। आप \d\s\d
देखते हैं। इसका क्या मतलब है? एक अंक एक अंक और एक अंक? निश्चित रूप से। लेकिन .NET Regexes में \d
और \s
दोनों एक माइक्रोवेल्ड "छुपाएं"। \d
किसी भी गैर-यूरोपीय अंक "मैचों" (और यूनिकोड में कई सारे हैं)। \s
"मैचों" इतने सारे गूढ़ स्थान हैं जिनमें से मुझे नाम भी नहीं पता ... मैं इसके बारे में भी सोचना नहीं चाहता हूं। वे बर्फबारी की तरह हैं। केवल 1/8 पानी से बाहर है, जबकि 7/8 छिपा हुआ है। लेकिन यह 7/8 है जो शायद आपको मार देगा।
आपको वास्तव में उपयोग करने वाले रेगेक्स इंजन को निर्दिष्ट करने की आवश्यकता है, क्योंकि प्रत्येक के पास अलग-अलग सीमाएं हैं। कुछ लोग कुछ व्याकरण की तरह regexes की अनुमति देने के लिए चले गए हैं। टीच्रिस्ट (टॉम क्रिस्सेन) के माध्यम से यहां देखकर एसओ पर आप कुछ रेगेक्स इंजन तक पहुंचने की शक्ति का विचार प्राप्त कर सकते हैं। – ninjalj