"E ora ti parlerò delle espressioni regolari. Questo argomento è complesso e semplice allo stesso tempo. Per comprendere a fondo le espressioni regolari, potresti aver bisogno di leggere due o tre libri pesanti, ma posso insegnarti come usarli Proprio adesso."
"Come amano scherzare i programmatori esperti, se hai un problema e pensi di risolverlo con espressioni regolari, ora hai due problemi."
"Hmm."
"Spero di non averti spaventato troppo, amico mio. No?"
"Okay, bene. Quindi, il nostro nuovo argomento sono le espressioni regolari."
"Se le semplifichiamo eccessivamente, le espressioni regolari sono modelli per le stringhe."
"Puoi verificare se una stringa corrisponde a un determinato schema. Puoi anche dividere una stringa in parti usando un delimitatore o uno schema."
"Ma cominciamo con qualcosa di semplice: che cos'è uno schema? "
"In SQL (ma non in Java), puoi verificare se una stringa corrisponde a un modello particolare. Ecco come appare:"
name like 'Alex%'
Qui name è una variabile, come è un comando per controllare uno schema e "Alex%" è lo schema.
In questo caso, % indica qualsiasi stringa o sottostringa.
Modello | Stringhe corrispondenti al modello |
---|---|
'Alessio%' | Alex Alex andr Alex ander Alex andra …. |
'%X%' | Ma x Ma x im Ale x andr … |
'%UN' | Olg a Helen a Ir a ... |
"In SQL, se è necessario specificare che deve esserci solo un altro carattere, utilizzare il carattere di sottolineatura: "_"."
Modello | Stringhe corrispondenti al modello |
---|---|
'Alessio%_' | Alex andr Alex ander Alex andra …. |
'_X' | Ax Bx Cx … |
'___' | Aaa Aab Bbb … |
"Ciò ha senso."
"Va bene, allora passiamo alle espressioni regolari."
"Le espressioni regolari in genere includono restrizioni non solo sul numero di caratteri, ma anche sul loro "contenuto". ."
"Ecco alcuni esempi di contenuto :"
Modello | Descrizione | Esempi |
---|---|---|
. | Qualsiasi personaggio | 1 |
\D | Qualsiasi cifra | 7 |
\D | Qualsiasi non cifra | C |
\S | Uno spazio, un'interruzione di riga o un carattere di tabulazione | ' ' |
\S | Qualsiasi cosa tranne spazi, tabulazioni e interruzioni di riga | F |
[az] | Qualsiasi lettera dalla a alla z | z.z |
[0-9] | Qualsiasi cifra da 0 a 9. | 8 |
\w | Qualsiasi carattere di parola | C |
\W | Qualsiasi carattere non verbale | _ |
"Non li ricorderò subito, ma non sembra troppo difficile."
"Eccellente, allora ecco alcuni esempi del numero di caratteri in una maschera: "
Modello | Descrizione | Esempi |
---|---|---|
UN? | Il carattere 'A' ricorre una volta o non compare affatto | UN |
SI+ | Il carattere 'B' ricorre una o più volte | BBBB |
C* | Il carattere 'C' ricorre zero o più volte | CCC |
D{n} | Il carattere 'D' ricorre n volte | Il modello D{4} corrisponde a DDDD |
E{n,} | Il carattere 'E' ricorre n o più volte | Il pattern E{2,} corrisponde a EEEEEEE |
F{n,m} | Il carattere 'F' ricorre tra n e m volte | Il pattern E{2,4} corrisponde a EEEE |
"Sembra tutto piuttosto semplice."
"Stai imparando tutto così in fretta. Ora vediamo come appare tutto insieme:"
Modello | Descrizione | Esempi |
---|---|---|
[anno Domini]? | Un carattere tra 'a' e 'd' ricorre una volta o non compare affatto | a, b, c, d |
[bd,z]+ | I caratteri "b", "c", "d" o "z" ricorrono una o più volte | b, bcdcdbdbdbdbzzzzbbzbzb, zbz |
[1,7-9]* | Le cifre 1, 7, 8 o 9 ricorrono zero o più volte | 1, 7, 9, 9777, 111199 |
1{5} | La cifra 1 ricorre 5 volte | 11111 |
[1,2,a,b]{2} | I simboli 1, 2, 'a' o 'b' ricorrono due volte | 11, 12, 1a, ab, 2b, bb, 22 |
[a,0]{2,3} | I simboli 'a' o 0 ricorrono 2 o 3 volte | laa, la0,00,0a, aaa,000, la00,0a0, la0a |
"Ancora tutto chiaro."
"Davvero? Hmm. O ho spiegato tutto molto bene o sei troppo veloce nell'apprendere. Beh, in ogni caso, va bene per noi."
"Ecco un paio di nuove intuizioni per te."
"Poiché le espressioni regolari sono spesso utilizzate per trovare sottostringhe, possiamo aggiungere altri due caratteri (^ e $) ai nostri modelli."
"^ significa che la sottostringa deve includere l'inizio della stringa."
"$ significa che la sottostringa deve includere la fine della stringa."
"Ecco alcuni esempi:"
Modello | Stringa e sottostringhe che corrispondono al modello |
---|---|
un{3} | aaaaaaaaaaa _ _ _ _ |
un{3}$ | aaaaaaaaaaa _ |
^a{3} | aaaaaaaaaaa _ |
^a{3}$ | aaaaaaaaaaa |
"E un altro punto importante."
"Nelle espressioni regolari, i seguenti caratteri hanno un significato speciale: [ ] \ / ^ $ . | ? * + ( ) { }. Sono chiamati caratteri di controllo. Quindi, non puoi semplicemente usarli nelle stringhe."
"Come nel codice Java, devono essere sfuggiti. "E ancora, come nel codice Java, il carattere '\' è usato per questo."
"Se vogliamo descrivere una stringa composta da tre '?" caratteri, non possiamo scrivere '?{3}', perché '?' è un carattere di controllo. Dobbiamo farlo così: \?{3}. Se vogliamo usare un carattere '\', allora dobbiamo scrivere '\\'."
"Ok capito."
"E ora ecco un'altra curiosità. Nei file con codice Java, anche il carattere '\' deve essere preceduto da escape nelle stringhe, poiché è un carattere di controllo."
"Ovviamente."
"Quindi, se stai cercando di definire un'espressione regolare Java in una stringa, devi eseguire due volte l'escape del carattere '\'."
"Ecco un esempio:"
Voglio una maschera che corrisponda a 'c:\anything' |
In teoria, l'espressione regolare dovrebbe avere questo aspetto: un carattere 'c', due punti, una barra rovesciata, un punto e un asterisco (per indicare qualsiasi numero di caratteri). Ho aggiunto degli spazi per migliorare la leggibilità: c : \ .* Ma i caratteri '\' e '.' devono essere sfuggiti, quindi l'espressione regolare sarà simile a questa: c : \\ \. * Oppure, senza spazi c: \\ \. * |
"Dovremmo avere tre barre rovesciate nella nostra espressione regolare. Ciò significa che in un file Java l'espressione regolare sarà simile a questa:" String regexp = "c: \\\\ \\. *"; |
"Wow! Whoa. Adesso lo so."
"E se decidi di approfondire questo argomento, ecco un paio di buoni link:"
GO TO FULL VERSION