Maison > développement back-end > C++ > Pourquoi `\ d` est-il plus lent que` [0-9] `en C # regex?

Pourquoi `\ d` est-il plus lent que` [0-9] `en C # regex?

Linda Hamilton
Libérer: 2025-01-31 18:31:13
original
184 Les gens l'ont consulté

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

C # Expression régulière

plus lente que plus lent d [0-9] Cet article traite d'une découverte surprenante dans le moteur d'expression régulière C #:

Le type de caractère semble être inférieur à l'efficacité de la plage de caractères

, même si d est un super ensemble de [0-9]. [0-9] d La différence entre

et

d [0-9] La raison principale de la différence d'efficacité est la différence entre ces deux caractères:

:
    Faites correspondre tout caractère de numéro Unicode. Cela inclut non seulement les numéros standard 0-9, mais aussi les autres nombres utilisés dans différentes langues et systèmes d'écriture. Par exemple, les nombres persans et les nombres Devanagari sont également
  • . d : d ne correspond que du numéro 0-9. Il s'agit d'une représentation compacte du jeu de caractères .
  • L'impact sur les performances [0-9] [0123456789] Lors de la correspondance de la chaîne avec l'expression régulière, le moteur d'expression régulière doit comparer chaque caractère dans la chaîne avec la classe de caractères spécifiée. Pour , il doit effectuer des inspections supplémentaires pour déterminer si le caractère est un numéro Unicode, qui peut être supérieur au caractère simple de vérification dans la plage de 0-9.
Vérification de test

Le code de test fourni par démontre cette différence de performances. Sur plus de 10 000 chaînes aléatoires (chaque chaîne contient environ 50% des nombres), les résultats suivants sont obtenus:

d Expression régulière

: 00: 00: 00.2141226 (plus lente)

Expression régulière : 00: 00: 00.1357972 (rapide)

Expression régulière

: 00: 00: 00.1388997 (légèrement plus lente que
    )
  • d
  • Conclusion
  • [0-9]
  • Bien que soit une abréviation pratique de
  • , ce n'est pas toujours le meilleur choix en termes de performances. Si vous avez seulement besoin de faire correspondre le numéro standard 0-9, il est recommandé d'utiliser la plage de caractères [0123456789]. [0-9]

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!

source:php.cn
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