Diferença entre regex e

Eu estou usando um regex para programar um validador de input para uma checkbox de texto onde eu só quero caracteres alfabéticos. Eu queria saber se [Az] e [a-zA-Z] eram equivalentes ou se havia diferença no desempenho.

Eu continuo lendo [a-zA-Z] nas minhas pesquisas e não menciono [Az] .

Eu estou usando String.matches(regex) do java.

[Az] corresponderá a caracteres ASCII no intervalo de A a z , enquanto [a-zA-Z] corresponderá a caracteres ASCII no intervalo de A a Z e no intervalo de z . À primeira vista, isso pode parecer equivalente – no entanto, se você observar essa tabela de caracteres ASCII, verá que Az inclui vários outros caracteres. Especificamente, eles são [ , \ , ] , ^ , _ e “ `(o que você claramente não quer).

As combinações az ‘a’ a ‘z’ AZ combinam ‘A’ a ‘Z’ Az e combinam com todas estas, assim como os caracteres entre ‘Z’ e ‘a’ que são [] ^ / _ `

Consulte http://www.asciitable.com/

Dê uma olhada na tabela ASCII . Você verá que existem alguns caracteres entre Z e a , então você vai combinar mais do que você pretendia.

Os colchetes criam uma class de caracteres e o hífen é uma abreviação para adicionar todos os caracteres entre os dois caracteres fornecidos. ou seja, [AF] pode ser escrito [ABCDEF] .

A class de caractere [Az] corresponderá a todos os caracteres entre esses caracteres, que em ASCII inclui alguns outros caracteres, como ‘[‘, ‘\’ e ‘]’.

Uma alternativa para especificar os dois casos seria definir a expressão regular para não diferenciar maiúsculas de minúsculas, usando o modificador /i .

Quando você der uma olhada na tabela ASCII, você verá o seguinte:

 A = 65 Z = 90 a = 97 z = 122 

Então, [Az] irá combinar todos os caracteres de 65 a 122. Isso inclui esses caracteres ( 91 -> 97 ) também:

  [\]^_` 

Isto significa que [A-Za-z] irá corresponder apenas ao alfabeto, sem os caracteres notados

Dê uma olhada no gráfico ASCII (no qual os caracteres Java são baseados): existem alguns caracteres de pontuação situados entre Z e a, ou seja:

 [\]^ _`