d
vs [0-9]
- Une comparaison surprenante Une discussion récente a déclenché un débat sur l'efficacité relative de d
et [0-9]
dans des expressions régulières. Les tests initiaux suggérés d
ont été plus rapides, mais une enquête plus approfondie a révélé une réalité plus nuancée: d
peut être moins efficace dans des scénarios spécifiques. Cet article explore les raisons de cette divergence.
La différence clé réside dans les ensembles de caractères que chaque expression correspond. [0-9]
ne correspond strictement que les chiffres ASCII 0 à 9. d
, cependant, est plus large; Il englobe tous les chiffres Unicode, y compris ceux de divers scripts non latins (par exemple, persan, devanagari).
Cette plage de correspondance élargie pour d
peut avoir un impact sur les performances. Le moteur regex doit évaluer un jeu de caractères plus grand, ce qui augmente potentiellement le temps de traitement. Bien que la différence puisse être négligeable dans de nombreux cas, l'impact devient plus prononcé lorsqu'il s'agit de grands ensembles de données ou de modèles regex complexes.
Le code d'extrait de code suivant illustre le jeu de caractères étendu correspondant à d
:
var sb = new StringBuilder(); for (UInt16 i = 0; i < 0x10FFFF; i++) { if (char.IsDigit((char)i)) { sb.Append((char)i); } } Console.WriteLine(sb.ToString());
Ce code itère via tous les points de code UNICODE et ajoute uniquement ceux classés comme chiffres de char.IsDigit()
, reflétant efficacement le comportement de d
. La sortie résultante est une liste complète des chiffres Unicode, mettant en évidence le jeu de caractères significativement plus grand par rapport aux dix chiffres correspondants par [0-9]
.
Par conséquent, tandis que d
offre une compatibilité plus large, [0-9]
offre des performances potentiellement supérieures lorsqu'elles traitent exclusivement des chiffres ASCII. Le choix entre eux doit être guidé par les besoins spécifiques de votre application et la nature des données traitées. Si vous êtes certain que votre entrée ne contient que des chiffres ASCII, [0-9]
est probablement l'option la plus efficace.
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!