Java reguliere expressies


Wat is een reguliere expressie?

Een reguliere expressie is een reeks tekens die een zoekpatroon vormt. Wanneer u zoekt naar gegevens in een tekst, kunt u dit zoekpatroon gebruiken om te omschrijven waarnaar u zoekt.

Een reguliere expressie kan een enkel teken zijn of een ingewikkelder patroon.

Reguliere expressies kunnen worden gebruikt om alle soorten tekstzoek- en tekstvervangingsbewerkingen uit te voeren.

Java heeft geen ingebouwde klasse voor reguliere expressies, maar we kunnen het java.util.regex pakket importeren om met reguliere expressies te werken. Het pakket omvat de volgende lessen:

  • Pattern Klasse - Definieert een patroon (te gebruiken in een zoekopdracht)
  • Matcher Klasse - Gebruikt om naar het patroon te zoeken
  • PatternSyntaxException Klasse - Geeft syntaxisfout aan in een patroon van reguliere expressies

Voorbeeld

Zoek uit of het woord "w3schools" in een zin voorkomt:

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

Voorbeeld uitgelegd

In dit voorbeeld wordt gezocht naar het woord "w3schools" in een zin.

Eerst wordt het patroon gemaakt met behulp van de Pattern.compile()methode. De eerste parameter geeft aan naar welk patroon wordt gezocht en de tweede parameter heeft een vlag om aan te geven dat de zoekopdracht hoofdletterongevoelig moet zijn. De tweede parameter is optioneel.

De matcher()methode wordt gebruikt om naar het patroon in een string te zoeken. Het retourneert een Matcher-object dat informatie bevat over de zoekopdracht die is uitgevoerd.

De find()methode retourneert waar als het patroon in de tekenreeks is gevonden en onwaar als het niet is gevonden.



vlaggen

Vlaggen in de compile()methode veranderen hoe de zoekopdracht wordt uitgevoerd. Hier zijn er een paar:

  • Pattern.CASE_INSENSITIVE - De hoofdletters worden genegeerd bij het uitvoeren van een zoekopdracht.
  • Pattern.LITERAL - Speciale tekens in het patroon hebben geen speciale betekenis en worden behandeld als gewone tekens bij het uitvoeren van een zoekopdracht.
  • Pattern.UNICODE_CASE- Gebruik het samen met de CASE_INSENSITIVEvlag om ook hoofdletters buiten het Engelse alfabet te negeren

Reguliere expressiepatronen

De eerste parameter van de Pattern.compile()methode is het patroon. Het beschrijft waarnaar wordt gezocht.

Haakjes worden gebruikt om een ​​reeks tekens te vinden:

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

metakarakters

Metatekens zijn tekens met een speciale betekenis:

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

Kwantificatoren

Kwantificatoren definiëren hoeveelheden:

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

Opmerking: als uw uitdrukking moet zoeken naar een van de speciale tekens, kunt u een backslash ( \ ) gebruiken om eraan te ontsnappen. In Java moeten backslashes in strings zelf worden geëscaped, dus er zijn twee backslashes nodig om speciale tekens te escapen. Als u bijvoorbeeld naar een of meer vraagtekens wilt zoeken, kunt u de volgende uitdrukking gebruiken: "\\?"