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

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

Linda Hamilton
Linda HamiltonOriginal
2025-01-31 18:31:13187Durchsuche

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

c#regulärer Ausdruck

langsamer als langsamer d [0-9] In diesem Artikel wird eine überraschende Entdeckung in der C#-Motor für den regulären Expression erörtert:

Charaktertyp scheint niedriger zu sein als der Effizienz der

-Scharakterbereiche, auch wenn d ein Supersatz von [0-9] ist. [0-9] d Der Unterschied zwischen

und

d [0-9] Der Hauptgrund für den Effizienzunterschied ist der Unterschied zwischen diesen beiden Zeichen:

:
    Übereinstimmen Sie jedem Unicode -Zahlenzeichen. Dies umfasst nicht nur Standardnummern 0-9, sondern auch andere in verschiedenen Sprachen und Schreibsystemen verwendete Zahlen. Zum Beispiel sind auch persische Zahlen und Devanagari -Zahlen
  • . d : d stimmt nur mit der Nummer 0-9 überein. Es ist eine kompakte Darstellung des Zeichensets .
  • Die Auswirkungen auf die Leistung [0-9] [0123456789] Wenn die Zeichenfolge mit dem regulären Ausdruck angepasst wird, muss die reguläre Expression Engine jedes Zeichen in der Zeichenfolge mit der angegebenen Zeichenklasse vergleichen. Für muss zusätzliche Inspektionen durchgeführt werden, um festzustellen, ob es sich bei dem Zeichen um eine Unicode-Zahl handelt, die möglicherweise höher ist als das einfache Überprüfungszeichen im Bereich von 0-9.
Testüberprüfung

Der von bereitgestellte Testcode zeigt diesen Leistungsunterschied. In mehr als 10.000 Zufallszeichenfolge (jede Zeichenfolge enthält etwa 50%der Zahlen) werden folgende Ergebnisse erzielt:

d regulärer Ausdruck

: 00: 00: 00.2141226 (langsamer)

regulärer Ausdruck : 00: 00: 00.1357972 (schnell)

regulärer Ausdruck

: 00: 00: 00.1388997 (etwas langsamer als
    )
  • d
  • Schlussfolgerung
  • [0-9]
  • Obwohl eine bequeme Abkürzung von
  • ist, ist es nicht immer die beste Wahl in Bezug auf die Leistung. Wenn Sie nur mit der Standardnummer 0-9 übereinstimmen müssen, wird empfohlen, den Charakterbereich [0123456789] zu verwenden. [0-9]

Das obige ist der detaillierte Inhalt vonWarum ist `\ d` langsamer 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