Regex, diferença entre ^[a-zA-Z] + $ vs [a-zA-Z]* [duplicado]
- Referência: o que significa este "regex"? 1 resposta
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.
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.
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.
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.