Differenza tra regex e

Sto usando una regex per programmare un validatore di input per una casella di testo in cui voglio solo caratteri alfabetici. Mi chiedevo se [Az] e [a-zA-Z] fossero equivalenti o se ci fossero differenze nelle prestazioni.

Continuo a leggere [a-zA-Z] sulle mie ricerche e nessuna menzione di [Az] .

Sto usando java‘s String.matches(regex) .

[Az] i caratteri ASCII nell’intervallo da A a z , mentre [a-zA-Z] corrisponderà ai caratteri ASCII nell’intervallo dalla A alla Z e nell’intervallo da A a Z A prima vista, questo potrebbe sembrare equivalente, tuttavia, se guardi questa tabella di caratteri ASCII, vedrai che Az include molti altri caratteri. Nello specifico, sono [ , \ , ] , ^ , _ e ` (che chiaramente non vuoi).

Le corrispondenze az ‘a’ a ‘z’ AZ corrispondono a ‘A’ a ‘Z’ Az corrispondono a tutti questi e ai caratteri tra ‘Z’ e ‘a’ che sono [] ^ / _ `

Fare riferimento a http://www.asciitable.com/

Dai un’occhiata al tavolo ASCII . Vedrai che ci sono alcuni personaggi tra Z e a , quindi abbinerai più di quanto hai intuito.

Quando dai un’occhiata alla tabella ASCII, vedrai:

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

Quindi [Az] corrisponderà a tutti i caratteri da 65 a 122. Ciò include anche questi caratteri ( 91 -> 97 ):

  [\]^_` 

Ciò significa che [A-Za-z] corrisponderà solo all’alfabeto, senza i caratteri notati

Le parentesi quadre creano una class di caratteri e il trattino è una scorciatoia per aggiungere ogni carattere tra i due caratteri forniti. cioè [AF] può essere scritto [ABCDEF] .

La class di caratteri [Az] ogni carattere tra quei caratteri, che in ASCII include altri caratteri come “[‘,’ \ ‘e’] ‘.

Un’alternativa alla specifica di entrambi i casi sarebbe quella di impostare l’espressione regolare senza distinzione tra maiuscole e minuscole, utilizzando il modificatore /i .

Dai un’occhiata al grafico ASCII (su cui si basano i caratteri Java): ci sono alcuni caratteri di punteggiatura situati tra Z e a, precisamente questi:

 [\]^ _`