Heim >Backend-Entwicklung >C++ >Warum ist `\ d` weniger effizient als` [0-9] `in C# regex?

Warum ist `\ d` weniger effizient als` [0-9] `in C# regex?

Barbara Streisand
Barbara StreisandOriginal
2025-01-31 18:41:08139Durchsuche

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

c#regulärer Ausdruck

Die Effizienz ist niedriger als : Unterschiede für Anfragen d [0-9] Die jüngste Leistung wird relativ unerwartet entdeckt. Normalerweise sollte die Effizienz des angegebenen Zeichens höher als der Zeichensatz sein. Auch im Vergleich zu dem langwierigeren

-Scharaktersatz zeigt

den Nachteil der Leistung. d [0-9] Um dieses überraschende Ergebnis zu erklären, lassen Sie uns einige mögliche Gründe untersuchen: [0123456789] d <.> 1. Unicode Digitale Erkennung:

repräsentiert alle Unicode -Zahlen, nicht nur 10 Zeichen, die in

angegeben sind. Unicode enthält andere Zahlen aus verschiedenen Sprachen, wie z. B. persische Ziffern (۱۲۳۴۵۶۷۸۹). Dieser breitere Bereich kann zusätzliche Berechnungsaufwand einführen, wodurch die Effizienz von verringert wird.

Um dieses Konzept zu erklären, können wir den folgenden Code verwenden, um eine Liste aller Unicode -Nummern zu generieren:

d [0-9] Dies erzeugt eine lange Zeichenfolge, die die folgenden Zeichen (und andere Zeichen) enthält: d

٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯

<.> 2. Implementierungsunterschiede:

<code class="language-csharp">StringBuilder sb = new StringBuilder();
for (UInt16 i = 0; i < 0x10FFFF; i++)
{
    if (char.IsDigit((char)i))
    {
        sb.Append((char)i);
    }
}
string allUnicodeDigits = sb.ToString();</code>

Die reguläre Expressionsmotor kann auf unterschiedliche Weise

und

erreichen, was zu Leistungsunterschieden führen kann. C#Die reguläre Expressionsmotor kann

spezifisch optimieren, um die Effizienz zu verbessern, und der breitere Bereich von

kann eine solche Optimierung einschränken. Schlussfolgerung:

d Obwohl es zu Beginn überraschend war, kann die [0-9] langsamere Leistung auf die Expansionserkennung von Unicode -Zahlen zurückgeführt werden. Bei Verwendung eines begrenzten Zahlensatzes (z. B. 0-9) kann [0-9] oder d eine bessere Effizienz bieten. Wenn Sie jedoch eine breitere Reihe von Zahlen aus verschiedenen Sprachen anpassen müssen, ist

immer noch ein leistungsstarkes Werkzeug.

Das obige ist der detaillierte Inhalt vonWarum ist `\ d` weniger effizient als` [0-9] `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