Un'espressione regolare è un tipo di modello che può essere applicato al testo (String, in Java). Java fornisce il pacchetto
java.util.regex per la corrispondenza delle espressioni regolari. Le espressioni regolari sono molto simili al linguaggio di programmazione Perl e sono molto facili da imparare. Un'espressione regolare corrisponde al testo (parte di esso) oppure no. * Se un'espressione regolare corrisponde a una parte di testo, possiamo trovarla. ** Se l'espressione regolare è composta, possiamo facilmente capire quale parte dell'espressione regolare corrisponde a quale parte del testo.
Primo esempio
L'espressione regolare "
[a-z] +
" corrisponde a tutte le lettere minuscole nel testo.
[a-z]
indica qualsiasi carattere da
a
a
z
compreso e
+
significa "uno o più" caratteri. Supponiamo di fornire la stringa "codice 2 impara tutorial Java". Come farlo in Java Innanzitutto, devi creare un modello:
import java.util.regex.*;
Pattern p = Pattern.compile(“[a-z]+”);
Successivamente devi creare
matcher
il testo inviando un messaggio sul diagramma:
Matcher m = p.matcher(“code 2 learn java tutorial”);
NOTA: non abbiamo costruttori
Pattern
,
Matcher
li creiamo utilizzando metodi di classe
Pattern
.
Pattern Class:
L'oggetto classe costituisce una rappresentazione di un'espressione regolare. La classe Pattern non fornisce alcun costruttore pubblico. Per creare un modello, devi prima chiamare uno dei metodi statici pubblici, che poi restituiscono un oggetto della classe
Pattern
. Questi metodi accettano un'espressione regolare come argomento.
Matcher Class:
L'oggetto Finder è un motore che interpreta il modello ed esegue operazioni di corrispondenza sulla stringa di input. Come
Pattern
una classe,
Matcher
non ha costruttori pubblici. Ottieni un oggetto
Matcher
chiamando un metodo
matcher
su un oggetto di classe
Pattern
. Una volta completati questi passaggi e ora che abbiamo un'istanza della classe
Matcher m
, possiamo verificare se il modello è stato trovato o meno e, in tal caso, in quale posizione, ecc.
m.matches()
restituisce vero se il modello corrisponde all'intera stringa, falso altrimenti.
m.lookingAt()
restituisce vero se il modello corrisponde all'inizio della stringa, falso altrimenti.
m.find ()
restituisce vero se il modello corrisponde a qualsiasi parte del testo.
Trovare una corrispondenza
Dopo una corrispondenza riuscita,
m.start() restituirà l'indice del primo carattere corrispondente e
m.end() restituirà l'indice dell'ultimo carattere corrispondente, più uno. Se è stato effettuato un tentativo fallito e non è stata trovata alcuna corrispondenza ,
m.start()
lanceranno
m.end()
IllegalStateException
- Questo è
RuntimeException
così non devi prenderlo.
Può sembrare strano
m.end()
restituire l'indice dell'ultimo carattere corrispondente più uno, ma è esattamente ciò che la maggior parte dei file
String
.
- Per esempio,
“Now is the time“.substring(m.start(), m.end())
restituirà la stessa stringa. Diamo un'occhiata al codice:
import java.util.regex.*;
public class RegexTest {
public static void main(String args[]) {
String pattern = "[a-z]+";
String text = "code 2 learn java tutorial";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while(m.find()) {
System.out.print(text.substring(m.start(), m.end()) + "*");
}
}
}
Output: code*learn*java*tutorial*
Metodi aggiuntivi
Se c'è una corrispondenza, allora:
m.replaceFirst(replacement)
restituisce una nuova stringa, dove verrà sostituita la prima sottostringa che corrisponde al modelloreplacement
m.replaceAll(replacement)
restituisce una nuova stringa, dove ogni sottostringa che corrisponde al modello verrà sostituita
m.find(StartIndex)
trova la corrispondenza successiva a partire dall'indice specificato
m.reset()
reimposta il modello
m.reset(NewText)
reimposta il finder e gli fornisce un nuovo testo (forse String
, StringBuffer
o CharBuffer
)
Sintassi delle espressioni regolari
^
Corrisponde all'inizio di una riga.
$
Corrisponde alla fine della stringa.
.
Corrisponde a qualsiasi singolo carattere tranne il fine riga. L'uso dell'opzione m consente di abbinare una nuova riga.
[...]
Corrisponde a qualsiasi singolo carattere tra parentesi.
[^ ...]
Corrisponde a qualsiasi singolo carattere non tra parentesi.
\A
Inizia l'intera linea.
\z
Fine dell'intera riga.
\Z
La fine dell'intera riga tranne il terminatore di riga finale.
re*
Corrisponde a 0 o più occorrenze dell'espressione precedente.
re+
Una o più corrispondenze dell'espressione precedente.
re?
Corrisponde a 0 o 1 alla posizione dell'espressione precedente.
re{n}
Corrisponde esattamente a N Il numero di occorrenze dell'espressione precedente.
re{n,}
Corrisponde a N o più occorrenze dell'espressione precedente.
re{n, m}
Corrisponde ad almeno n e al massimo m occorrenze dell'espressione precedente.
a|b
Corrisponde a o b.
(re)
Un gruppo di espressioni regolari e il ricordo del testo trovato.
(?: re)
Gruppi di espressioni regolari che non ricordano il testo trovato.
(?> re)
Corrisponde a un modello indipendente senza ritorni.
\w
Corrisponde a lettere e numeri [a-zA-Z_0-9].
\W
Queste non sono lettere o numeri.
\s
Corrisponde agli spazi. Equivalente a [\t\n\r\f].
\S
Non caratteri di spazi bianchi.
\d
Corrisponde ai numeri. Equivalente a [0-9].
\D
Non corrisponde ai numeri.
\G
Corrisponde al punto dell'ultima partita.
\n
Corrisponde alla nuova riga.
\b
Corrisponde al confine di una parola.
\B
Corrispondenze non sul confine di una parola.
\n, \t, etc.
Caratteri di nuova riga, ritorno a capo, tabulazione, ecc.
\Q
Cita tutti i caratteri prima di \E.
\E
La citazione iniziata con \Q termina.
GO TO FULL VERSION