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 zoekenPatternSyntaxException
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 deCASE_INSENSITIVE
vlag 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: "\\?"