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
260 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!

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