कोई सैद्धांतिक सीमा नहीं है, हालांकि प्रत्येक नियमित अभिव्यक्ति इंजन अपने आप ही कार्यान्वयन सीमा होगा। इस मामले में, चूंकि आप .NET का उपयोग कर रहे हैं, इसलिए सीमा .NET रनटाइम का उपयोग कर सकते हैं स्मृति की मात्रा के कारण है।
एक लाख alernations के साथ एक नियमित अभिव्यक्ति मेरे लिए ठीक काम करता है:
string input = "a<142>c";
var options = Enumerable.Range(0, 1000000).Select(x => "<" + x + ">");
string pattern = string.Join("|", options);
string result = Regex.Replace(input, pattern, "zzz");
परिणाम:
azzzc
हालांकि यह बहुत धीमी है। 10 मिलियन तक विकल्पों की संख्या में वृद्धि मुझे OutOfMemoryException
देता है।
आपको शायद किसी अन्य दृष्टिकोण को देखने से फायदा होगा।
स्रोत
2011-09-23 12:36:54
यदि आप 500000 तत्व लंबे रेगेक्स पैटर्न रखने की योजना बना रहे हैं, तो आप अपने समाधान आर्किटेक्चर पर पुनर्विचार करना चाहेंगे। ;) –
क्या आपका मतलब सैद्धांतिक सीमा है या क्या आपका मतलब व्यावहारिक सीमा है? – Chris
@ क्रिस दोनों। मुझे उस परिस्थिति में भी दिलचस्पी है जहां इसे संकलित किया जाता है। नया रेगेक्स (पैटर्न, RegexOptions.Compiled); – Bamboo