Heim >Backend-Entwicklung >C++ >Warum ist `\ d` weniger effizient als` [0-9] `Für die Ziffernung in C# Regex?
c#regulärer Ausdruck
Der Grund für ist niedriger als d
[0-9]
in der regulären Expressionsmotor der C#-Abine verwendet wird, unerwartet niedriger ist als der Zeichen für d
und [0-9]
. Diese Entdeckung löste zwei Probleme aus: [0123456789]
höhere Effizienz als das Einstellen ? [0-9]
[0123456789]
Menschen mögen denken, dass der Umfang effizienter ist, da er einen bestimmten und engen Charakterbereich abdeckt und die Sammlung deutlich alle zehn Zahlen auflistet. Die Testergebnisse zeigen jedoch, dass die Leistungsunterschiede zwischen den beiden Methoden am wenigsten sind.
die Effizienz von
ist niedriger als?
d
Test ergab, dass die Effizienz von signifikant niedriger ist als [0-9]
. Dies ist besonders rätselhaft, da normalerweise als Abkürzung von
d
[0-9]
Übereinstimmende Unicode -Nummern, d
Übereinstimmung mit ASCII -Nummern [0-9]
mit nur ASCII-Zahlen (0-9), d
Übereinstimmung [0-9]
Alle Unicode-Zahlen . Dies schließt Charaktere aus anderen Sprachen und Charakteren wie persischen Ziffern (۱۲۳۴۵۶۷۸۹) und Dava Garri Ziffern (०१२३४५६७८९) ein. Um dies zu beweisen, generiert der folgende Code eine Zeichenfolge, die alle Unicode -Nummern enthält:
[0-9]
Die generierte Zeichenfolge zeigt d
verschiedene Zeichen, die als Zahlen identifiziert wurden, einschließlich Zeichen aus Arabisch, Thai, Khamno und anderen Zeichen.
Leistungsauswirkungen
<code class="language-csharp">var sb = new StringBuilder(); for (UInt16 i = 0; i < 0x10FFFF; i++) { if (char.IsDigit((char)i)) { sb.Append((char)i); } } string unicodeDigits = sb.ToString();</code>
Überprüfen Sie den weiten Bereich des Zeichenbereichs (Unicode -Zahlen und ASCII -Zahlen), in dem die Leistungsunterschiede zwischen d
und
eine bessere Leistung als .
Das obige ist der detaillierte Inhalt vonWarum ist `\ d` weniger effizient als` [0-9] `Für die Ziffernung in C# Regex?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!