Avatar ·

C# में \d, [0-9] से धीमा क्यों काम करता है?

सभी को नमस्ते! मैं एक शुरुआती C# डेवलपर हूँ और रेगुलर एक्सप्रेशन को ऑप्टिमाइज़ करते समय एक अनपेक्षित समस्या का सामना किया। मेरे पास एक कार्य है: जाँच करना कि क्या स्ट्रिंग केवल अंकों से बनी है। मैंने regex के दो वेरिएंट लिखे: 1. `^\d+$` 2. `^[0-9]+$` सहज रूप से ऐसा लगता है कि `\d` तेज़ या कम से कम समान गति का होना चाहिए, क्योंकि यह अंकों के लिए एक शॉर्टकट है। लेकिन मैंने 1000 कैरेक्टर लंबी स्ट्रिंग (1000 रैंडम अंक) पर `Stopwatch` के साथ एक छोटा बेंचमार्क चलाया और चौंकाने वाले परिणाम मिले: ``` \d: ~450 टिक [0-9]: ~120 टिक ``` अंतर लगभग 4 गुना है! और मैंने यादृच्छिकता को खत्म करने के लिए टेस्ट 100 बार चलाया। परिणाम स्थिर हैं। मैं .NET 6 का उपयोग कर रहा हूँ, बिना किसी फ्लैग के स्टैंडर्ड `Regex`। ऐसा क्यों होता है? आखिरकार, `\d` और `[0-9]` दोनों को एक ही चीज़ — 0 से 9 तक के अंक — को दर्शाना चाहिए। क्या मैं कुछ गलत माप रहा हूँ? या C# में Unicode से संबंधित कोई समस्या है? कृपया बताएं कि मामला क्या है और अंक खोजने के लिए regex सही तरीके से कैसे लिखें।

अभी तक कोई उत्तर नहीं।

लॉग इन करें उत्तर देने के लिए

ब्लॉग