Regular Expressions
Classi di caratteri
Ricerca…
Osservazioni
Lezioni semplici
regex | fiammiferi |
---|---|
[abc] | Uno dei seguenti caratteri: a , b , o c |
[az] | Qualsiasi carattere da a a z , compreso (questo è chiamato intervallo) |
[0-9] | Qualsiasi cifra da 0 a 9 inclusi |
Classi comuni
Alcuni gruppi / intervalli di caratteri sono usati così spesso, hanno abbreviazioni speciali:
regex | fiammiferi |
---|---|
\w | Caratteri alfanumerici più il carattere di sottolineatura (noto anche come "caratteri di parole") |
\W | Caratteri non parola (uguali a [^\w] ) |
\d | Cifre ( più larghe di [0-9] poiché includono cifre persiane, indiane ecc.) |
\D | Non digitate ( meno di [^0-9] dal momento che rifiutano le cifre persiane, quelle indiane ecc.) |
\s | Caratteri di spazi bianchi (spazi, tabulazioni, ecc.) Nota : può variare a seconda del motore / contesto |
\S | Caratteri non spazi bianchi |
Classi di negazione
Un segno di omissione (^) dopo la parentesi quadra di apertura funziona come una negazione dei caratteri che lo seguono. Questo corrisponderà a tutti i personaggi che non sono nella classe di caratteri.
Le classi di caratteri negate corrispondono anche ai caratteri di interruzione di riga, quindi se questi non devono essere confrontati, i caratteri di interruzione di riga specifici devono essere aggiunti alla classe (\ r e / o \ n).
regex | fiammiferi |
---|---|
[^AB] | Qualsiasi carattere diverso da A e B |
[^\d] | Qualsiasi carattere, tranne le cifre |
Le basi
Supponiamo di avere una lista di squadre, chiamate così: Team A
, Team B
, ..., Team Z
Poi:
-
Team [AB]
: Questo corrisponderà allaTeam A
o allaTeam B
-
Team [^AB]
: Questo corrisponderà a qualsiasi squadra eccetto laTeam A
o laTeam B
Spesso abbiamo bisogno di abbinare caratteri che "appartengono" insieme in un contesto o in un altro (come le lettere dalla A
alla Z
), e questo è ciò che le classi di caratteri sono per.
Abbina parole diverse e simili
Considera la classe del personaggio [aeiou]
. Questa classe di caratteri può essere utilizzata in un'espressione regolare per abbinare un insieme di parole simili pronunciate.
b[aeiou]t
corrisponde:
- pipistrello
- scommessa
- po
- Bot
- ma
Non corrisponde:
- incontro
- BTT
- bt
Classi di personaggi sulla propria partita, uno e un solo personaggio alla volta.
Corrispondenza non-alfanumerici (classe di caratteri negata)
[^0-9a-zA-Z]
Questo corrisponderà a tutti i caratteri che non sono né numeri né lettere (caratteri alfanumerici). Se anche il carattere di sottolineatura _
deve essere negato, l'espressione può essere abbreviata in:
[^\w]
O:
\W
Nelle seguenti frasi:
Ciao come va?
Non posso aspettare per il 2017 !!!
I seguenti personaggi corrispondono:
,
,,
'
,?
e il carattere di fine riga.
'
,,
!
e il carattere di fine riga.
NOTA UNICODE
Si noti che alcuni sapori con supporto delle proprietà dei caratteri Unicode possono interpretare \w
e \W
come [\p{L}\p{N}_]
e [^\p{L}\p{N}_]
che significa altre lettere Unicode e saranno inclusi anche i caratteri numerici (vedere i documenti PCRE ). Ecco un test PCRE \w
:
In .NET, \w
= [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}]
, e nota che non corrisponde a \p{Nl}
e \p{No}
differenza di PCRE (vedi la documentazione di \w
.NET ):
Si noti che per qualche motivo, le lettere minuscole Unicode 3.1 (come 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚
) non corrispondono.
Java (?U)\w
corrisponderà a un mix di ciò che \w
corrisponde in PCRE e .NET:
Corrispondenza senza cifre (classe di caratteri negata)
[^0-9]
Questo corrisponderà a tutti i caratteri che non sono cifre ASCII.
Se anche le cifre Unicode devono essere negate, è possibile utilizzare la seguente espressione, a seconda delle impostazioni di gusto / lingua:
[^\d]
Questo può essere abbreviato in:
\D
Potrebbe essere necessario abilitare il supporto delle proprietà dei caratteri Unicode in modo esplicito utilizzando il modificatore u
o programmaticamente in alcune lingue, ma ciò potrebbe non essere ovvio. Per convogliare esplicitamente l'intento, è possibile utilizzare il seguente costrutto (quando il supporto è disponibile):
\P{N}
Che per definizione significa: qualsiasi carattere che non sia un carattere numerico in nessun copione. In un intervallo di caratteri negato, puoi usare:
[^\p{N}]
Nelle seguenti frasi:
Ciao come va?
Non posso aspettare per il 2017 !!!
I seguenti personaggi saranno abbinati:
,
,,
'
,?
, il carattere di fine riga e tutte le lettere (minuscole e maiuscole).
'
,,
!
, il carattere di fine riga e tutte le lettere (minuscole e maiuscole).
Classe di personaggio e problemi comuni affrontati dal principiante
1. Classe di caratteri
La classe di caratteri è indicata da []
. Il contenuto all'interno di una classe di caratteri viene considerato single character separately
come single character separately
. ad esempio, supponiamo di usarlo
[12345]
Nell'esempio sopra, significa match 1 or 2 or 3 or 4 or 5
. In parole semplici, può essere inteso come or condition for single characters
( stress su singolo carattere )
1.1 Parola di cautela
- Nella classe di caratteri, non esiste il concetto di abbinamento di una stringa. Quindi, se stai usando regex
[cat]
, non significa che dovrebbe corrispondere alla parolacat
letteralmente, ma significa che dovrebbe corrispondere ac
oa
ot
. Questo è un malinteso molto comune tra le persone che sono più recenti a regex. - A volte le persone usano
|
(alternanza) all'interno della classe del personaggio pensando che agirà come unaOR condition
errata. ad esempio, usare[a|b]
significa effettivamente abbinarea
o|
(letteralmente) ob
.
2. Intervallo nella classe di caratteri
L'intervallo nella classe di caratteri è denotato usando -
segno. Supponiamo di voler trovare qualsiasi carattere negli alfabeti inglesi dalla A
alla Z
Questo può essere fatto usando la seguente classe di caratteri
[A-Z]
Questo potrebbe essere fatto per qualsiasi intervallo ASCII o unicode valido. Le gamme più comunemente utilizzate includono [AZ]
, [az]
o [0-9]
. Inoltre queste gamme possono essere combinate in classi di caratteri come
[A-Za-z0-9]
Ciò significa che corrisponde a qualsiasi carattere nell'intervallo da A to Z
o da A to Z
o a to z
0 to 9
. L'ordine può essere qualsiasi cosa. Quindi quanto sopra è equivalente a [a-zA-Z0-9]
a condizione che l'intervallo definito sia corretto.
2.1 Parola di cautela
A volte scrivendo intervalli per persone dalla
A
allaZ
scrivilo come[Az]
. Questo è sbagliato nella maggior parte dei casi perché stiamo usandoz
invece diZ
Quindi questo corrisponde a qualsiasi carattere compreso tra65
ASCII (da A) a122
(di z) che include molti caratteri non intenzionali dopo l'intervallo ASCII90
(di Z). TUTTAVIA ,[Az]
può essere usato per abbinare tutte le lettere[a-zA-Z]
in espressioni regolari in stile POSIX quando le regole di confronto sono impostate per una lingua specifica.[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
su Cygwin conLC_COLLATE="en_US.UTF-8"
produceABCEDF
. Se si impostaLC_COLLATE
suC
(su Cygwin, fatto conexport
), verrà fornito l'ABCEDEF[]_abcdef
previsto.Significato di
-
classe del personaggio interno è speciale. Denota gamma come spiegato sopra. Cosa succede se vogliamo corrispondere-
personaggio letteralmente? Non possiamo metterlo da nessuna parte altrimenti indicherà intervalli se è posto tra due caratteri. In questo caso dobbiamo mettere-
in partenza della classe di caratteri come[-AZ]
o in fine della classe di caratteri come[AZ-]
oescape it
se si desidera utilizzarlo in mezzo come[AZ\-az]
.
3. Classe di caratteri negata
La classe di caratteri negata è denotata da [^..]
. Il segno di omissione ^
indica corrispondere qualsiasi carattere tranne quello presente nella classe di caratteri. per esempio
[^cat]
significa che corrisponde a qualsiasi carattere tranne c
o a
o t
.
3.1 Parola di cautela
- Il significato del segno di caret
^
esegue la mappatura alla negazione solo se si trova all'inizio della classe di caratteri. Se è altrove nella classe di caratteri, viene trattato come carattere letterale senza alcun significato speciale. - Alcune persone scrivono espressioni regolari come
[^]
. Nella maggior parte dei motori regex, questo dà un errore. Il motivo è che quando stai usando^
nella posizione iniziale, si aspetta almeno un carattere che dovrebbe essere negato. In JavaScript , però, questo è un costrutto valido che combina tutto tranne che nulla , cioè corrisponde a qualsiasi simbolo possibile (ma diacritico, almeno in ES5).
Classi di caratteri POSIX
Le classi di caratteri POSIX sono sequenze predefinite per un determinato set di caratteri.
Classe di carattere | Descrizione |
---|---|
[:alpha:] | Caratteri alfabetici |
[:alnum:] | Caratteri alfabetici e cifre |
[:digit:] | cifre |
[:xdigit:] | Cifre esadecimali |
[:blank:] | Spazio e tab |
[:cntrl:] | Caratteri di controllo |
[:graph:] | Caratteri visibili (qualsiasi cosa eccetto spazi e caratteri di controllo) |
[:print:] | Caratteri e spazi visibili |
[:lower:] | Lettere minuscole |
[:upper:] | Lettere maiuscole |
[:punct:] | Punteggiatura e simboli |
[:space:] | Tutti i caratteri di spazi vuoti, comprese le interruzioni di riga |
Sono disponibili classi di caratteri aggiuntive a seconda dell'implementazione e / o della locale.
Classe di carattere | Descrizione |
---|---|
[:<:] | Inizio della parola |
[:>:] | Fine parola |
[:ascii:] | Caratteri ASCII |
[:word:] | Lettere, cifre e sottolineatura. Equivalente a \w |
Per usare l'interno di una sequenza di parentesi (o classe di caratteri), dovresti includere anche le parentesi quadre. Esempio:
[[:alpha:]]
Questo corrisponderà a un carattere alfabetico.
[[:digit:]-]{2}
Questo corrisponderà a 2 caratteri, che sono o cifre o -
. Il seguente corrisponderà:
-
--
-
11
-
-2
-
3-
Ulteriori informazioni sono disponibili su: Regular-expressions.info