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 सही तरीके से कैसे लिखें।