Espressioni regolari Java


Che cos'è un'espressione regolare?

Un'espressione regolare è una sequenza di caratteri che forma un modello di ricerca. Quando cerchi dati in un testo, puoi utilizzare questo modello di ricerca per descrivere ciò che stai cercando.

Un'espressione regolare può essere un singolo carattere o un modello più complicato.

Le espressioni regolari possono essere utilizzate per eseguire tutti i tipi di operazioni di ricerca e sostituzione di testo .

Java non ha una classe Regular Expression incorporata, ma possiamo importare il java.util.regex pacchetto per lavorare con le espressioni regolari. Il pacchetto comprende le seguenti classi:

  • PatternClasse - Definisce un modello (da utilizzare in una ricerca)
  • MatcherClasse - Usato per cercare il modello
  • PatternSyntaxExceptionClasse: indica un errore di sintassi in un modello di espressione regolare

Esempio

Scopri se ci sono occorrenze della parola "w3schools" in una frase:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  public static void main(String[] args) {
    Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher("Visit W3Schools!");
    boolean matchFound = matcher.find();
    if(matchFound) {
      System.out.println("Match found");
    } else {
      System.out.println("Match not found");
    }
  }
}
// Outputs Match found

Esempio spiegato

In questo esempio, la parola "w3schools" viene cercata in una frase.

Innanzitutto, il modello viene creato utilizzando il Pattern.compile()metodo. Il primo parametro indica quale modello viene cercato e il secondo parametro ha un flag per indicare che la ricerca non deve fare distinzione tra maiuscole e minuscole. Il secondo parametro è facoltativo.

Il matcher()metodo viene utilizzato per cercare il modello in una stringa. Restituisce un oggetto Matcher che contiene informazioni sulla ricerca eseguita.

Il find()metodo restituisce true se il modello è stato trovato nella stringa e false se non è stato trovato.



Bandiere

I flag nel compile()metodo cambiano il modo in cui viene eseguita la ricerca. Eccone alcuni:

  • Pattern.CASE_INSENSITIVE - Il caso delle lettere verrà ignorato durante l'esecuzione di una ricerca.
  • Pattern.LITERAL - I caratteri speciali nel modello non avranno alcun significato speciale e verranno trattati come caratteri normali durante l'esecuzione di una ricerca.
  • Pattern.UNICODE_CASE- Usalo insieme alla CASE_INSENSITIVEbandiera per ignorare anche le maiuscole e minuscole delle lettere al di fuori dell'alfabeto inglese

Modelli di espressioni regolari

Il primo parametro del Pattern.compile()metodo è il pattern. Descrive ciò che viene cercato.

Le parentesi vengono utilizzate per trovare un intervallo di caratteri:

Expression Description
[abc] Find one character from the options between the brackets
[^abc] Find one character NOT between the brackets
[0-9] Find one character from the range 0 to 9

Metacaratteri

I metacaratteri sono caratteri con un significato speciale:

Metacharacter Description
| Find a match for any one of the patterns separated by | as in: cat|dog|fish
. Find just one instance of any character
^ Finds a match as the beginning of a string as in: ^Hello
$ Finds a match at the end of the string as in: World$
\d Find a digit
\s Find a whitespace character
\b Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b
\uxxxx Find the Unicode character specified by the hexadecimal number xxxx

Quantificatori

I quantificatori definiscono le quantità:

Quantifier Description
n+ Matches any string that contains at least one n
n* Matches any string that contains zero or more occurrences of n
n? Matches any string that contains zero or one occurrences of n
n{x} Matches any string that contains a sequence of X n's
n{x,y} Matches any string that contains a sequence of X to Y n's
n{x,} Matches any string that contains a sequence of at least X n's

Nota: se la tua espressione deve cercare uno dei caratteri speciali, puoi usare una barra rovesciata ( \ ) per evitarli. In Java, è necessario eseguire l'escape delle barre inverse nelle stringhe, quindi sono necessarie due barre inverse per eseguire l'escape dei caratteri speciali. Ad esempio, per cercare uno o più punti interrogativi è possibile utilizzare la seguente espressione: "\\?"