Por que \d em C# é mais lento que [0-9]?
Olá a todos! Sou um desenvolvedor C# iniciante e me deparei com um problema inesperado ao otimizar expressões regulares.
Tenho uma tarefa: verificar se uma string consiste apenas em dígitos. Escrevi duas variantes de regex:
1. `^\d+$`
2. `^[0-9]+$`
Intuitivamente, parece que `\d` deveria ser mais rápido ou pelo menos tão rápido, já que é apenas uma abreviação para dígitos. Mas fiz um pequeno benchmark com `Stopwatch` em uma string de 1000 caracteres (1000 dígitos aleatórios) e obtive resultados chocantes:
```
\d: ~450 ticks
[0-9]: ~120 ticks
```
Uma diferença de quase 4 vezes! Executei o teste 100 vezes para eliminar aleatoriedade. Os resultados são estáveis.
Estou usando .NET 6, `Regex` padrão sem flags. Por que isso acontece? Afinal, tanto `\d` quanto `[0-9]` deveriam representar a mesma coisa — dígitos de 0 a 9. Será que estou medindo algo errado? Ou existem armadilhas com Unicode em C#?
Por favor, me digam qual é o problema e como escrever regex corretamente para buscar dígitos.
No answers yet.
Faça login para deixar uma resposta