¿Por qué \d en C# funciona más lento que [0-9]?
¡Hola a todos! Soy un desarrollador C# principiante y me encontré con un problema inesperado al optimizar expresiones regulares.
Tengo una tarea: verificar si una cadena consiste solo en dígitos. Escribí dos variantes de la regex:
1. `^\d+$`
2. `^[0-9]+$`
Intuitivamente, parece que `\d` debería ser más rápido o al menos igual en velocidad, ya que es solo una abreviatura para dígitos. Pero hice un pequeño benchmark con `Stopwatch` en una cadena de 1000 caracteres (1000 dígitos aleatorios) y obtuve resultados impactantes:
```
\d: ~450 ticks
[0-9]: ~120 ticks
```
¡Casi 4 veces de diferencia! Además, ejecuté la prueba 100 veces para descartar la aleatoriedad. Los resultados son estables.
Estoy usando .NET 6, `Regex` estándar sin flags. ¿Por qué sucede esto? Tanto `\d` como `[0-9]` deberían significar lo mismo: dígitos del 0 al 9. ¿Quizás estoy midiendo algo incorrectamente? ¿O hay algún problema con Unicode en C#?
Por favor, díganme cuál es el problema y cómo escribir correctamente las regex para buscar dígitos.