Heim >Backend-Entwicklung >C++ >Warum ist `\ d` weniger effizient als` [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
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
underreichen, was zu Leistungsunterschieden führen kann. C#Die reguläre Expressionsmotor kann
spezifisch optimieren, um die Effizienz zu verbessern, und der breitere Bereich vonkann 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
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!