Oi, tudo bem?
Augusto, essa é uma excelente pergunta. Embora os dois padrões busquem validar o mesmo formato de CPF, existem diferenças técnicas importantes no comportamento de cada um.
A resposta curta é: sim, há diferença, e a segunda opção é mais precisa.
Vamos analisar os pontos principais:
1. O perigo do ponto final (.)
Na sua primeira expressão, você utilizou o ponto diretamente: [0-9]{3}.[0-9]{3}.
Em Expressões Regulares, o ponto é um metacaractere que significa "qualquer caractere" (uma letra, um espaço, um arroba, etc.).
- No seu primeiro exemplo: O CPF
123A456B789-00 seria aceito como válido, pois o ponto interpretou as letras 'A' e 'B' como caracteres permitidos. - No exemplo do instrutor: O uso de
\\. (escape) indica que você quer validar especificamente o caractere de ponto final literal.
2. Classes de caracteres: [0-9] vs \\d
Aqui a diferença é apenas estética e de conveniência:
[0-9] define um intervalo explícito de números.\\d é um atalho (shorthand) para representar qualquer dígito numérico.
Ambos funcionam da mesma forma na prática para o sistema brasileiro.
3. Âncoras de início e fim (^ e $)
Você adicionou ^ (início da linha) e $ (fim da linha). Isso é uma boa prática!
Espero ter ajudado.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!