Regex, diferença entre ^[a-zA-Z] + $ vs [a-zA-Z]* [duplicado]

Esta pergunta já tem uma resposta:
  • Referência: o que significa este "regex"? 1 resposta
Sou muito nova na programação e disseram-me para evitar a regex por agora, mas acho-a extremamente útil.

ao escrever um programa para verificar se um texto só contém letras, encontrei no stackoverlow que tanto ^[a-zA-Z]+$ como [a-zA-Z]* produzem os mesmos resultados. Eu entendo como [a-zA-Z] funciona e eu entendo como [A-z]é diferente de ambos os bem, mas eu não entendo +$ vs ^[]* ou por que produzir o mesmo resultado e estou tendo dificuldade em encontrar qualquer coisa para explicar.

Aqui está o exemplo em que o usei:
String student = input.next();
while (!student.matches("[a-zA-Z]*")) {
   System.out.print("Invalid input. Enter name: ");
   student = input.next();
}
Esta é a minha primeira pergunta, peço desculpa se este tipo de pergunta é desaprovada.

 1
Author: Josh Smith, 2014-11-03

2 answers

* é igual ou superior a zero, + é um ou mais.

No entanto, há uma diferença maior que é o ^ e $. No primeiro exemplo, está dizendo que deve conter apenas [a-zA-Z], onde a cadeia 123abc123 é Não válida.

No 2º exemplo, onde ^ e $ são omitidos, 123abc123 é válido.

 2
Author: Matthew, 2014-11-03 20:23:19

Como sabes,

[a-zA-Z]

Corresponde a uma única letra maiúscula ou minúscula.

[a-zA-Z]*

Corresponde a zero ou mais letras maiúsculas ou minúsculas numa linha.

^[a-zA-Z]+$

Corresponde a um texto que começa com uma ou mais letras maiúsculas ou minúsculas e termina também com ele. Ou seja, a única coisa no seu texto são letras maiúsculas ou minúsculas.

^ e $ desempenham mais de um papel quando você está lidando com fluxos de dados, usando expressões regulares para peneirar coisas que você quer enquanto ignorando o que você não faz. esse último padrão pode ser usado para encontrar um fluxo que consiste apenas em letras maiúsculas e minúsculas.

 2
Author: n8wrl, 2014-11-03 20:27:15