Maison > développement back-end > C++ > Pourquoi `\ d` est-il moins efficace que` [0-9] `pour la correspondance des chiffres en C # regex?

Pourquoi `\ d` est-il moins efficace que` [0-9] `pour la correspondance des chiffres en C # regex?

Barbara Streisand
Libérer: 2025-01-31 18:26:09
original
939 Les gens l'ont consulté

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

C # Expression régulière

La raison de est inférieure à d [0-9]

Le test de performance récent montre que dans le moteur d'expression régulière C #, l'efficacité utilisée pour correspondre au nombre de

est inattendue inattendue que le jeu de caractères d et [0-9]. Cette découverte a déclenché deux problèmes: [0123456789]

<.> 1. Pourquoi la plage

est-elle une efficacité plus élevée que le réglage ? [0-9] [0123456789] Les gens peuvent penser que la portée est plus efficace, car elle couvre une plage de caractères spécifique et étroite, et la collection répertorie clairement les dix numéros. Cependant, les résultats des tests montrent que les différences de performances entre les deux méthodes sont les moins.

<.> 2. Pourquoi

l'efficacité de

est inférieure à

? Le test d a révélé que l'efficacité de est significativement inférieure à [0-9]. Ceci est particulièrement déroutant, car est généralement considéré comme l'abréviation de

. Une enquête plus approfondie révèle une différence fondamentale:

d [0-9] correspondant aux numéros Unicode, d correspondant aux numéros ASCII [0-9]

avec uniquement des nombres ASCII (0-9), d correspond à [0-9] tous les numéros Unicode . Cela comprend des personnages d'autres langues et personnages, tels que les chiffres persans (۱۲۳۴۵۶۷۸۹) et les chiffres Dava Garri (०१२३४५६७८९). Pour le prouver, le code suivant génère une chaîne contenant tous les numéros Unicode:

[0-9] La chaîne générée montre d divers caractères identifiés comme des nombres, y compris des caractères arabes, thaï, khamno et autres caractères. Impact de performance

var sb = new StringBuilder();
for (UInt16 i = 0; i < 0x10FFFF; i++)
{
    if (char.IsDigit((char)i))
    {
        sb.Append((char)i);
    }
}
string unicodeDigits = sb.ToString();
Copier après la connexion

Vérifiez la large gamme de plages de caractères (nombres Unicode et nombres ASCII) expliquant les différences de performance entre d et

. Dans le cas de seuls numéros ASCII, l'utilisation

produira de meilleures performances que .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal