Heim >Backend-Entwicklung >C++ >Warum ist `\ d` weniger effizient als` [0-9] `Für die Ziffernung in C# Regex?

Warum ist `\ d` weniger effizient als` [0-9] `Für die Ziffernung in C# Regex?

Barbara Streisand
Barbara StreisandOriginal
2025-01-31 18:26:09889Durchsuche

Why is `d` Less Efficient Than `[0-9]` for Digit Matching in C# Regex?

c#regulärer Ausdruck

Der Grund für ist niedriger als d [0-9]

Der jüngste Leistungstest zeigt, dass die Effizienz, die zur Anzahl der

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]

<.> 1. Warum ist der Bereich

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.

<.> 2. Warum

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

angesehen wird. Weitere Untersuchungen zeigen einen grundlegenden Unterschied:

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

erläutert werden. Verwenden Sie bei nur ASCII -Zahlen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn