Wyrażenia regularne Java


Co to jest wyrażenie regularne?

Wyrażenie regularne to sekwencja znaków tworząca wzorzec wyszukiwania. Podczas wyszukiwania danych w tekście możesz użyć tego wzorca wyszukiwania do opisania tego, czego szukasz.

Wyrażenie regularne może być pojedynczym znakiem lub bardziej skomplikowanym wzorcem.

Wyrażenia regularne mogą służyć do wykonywania wszystkich typów operacji wyszukiwania tekstu i zamiany tekstu .

Java nie ma wbudowanej klasy wyrażeń regularnych, ale możemy zaimportować java.util.regex pakiet do pracy z wyrażeniami regularnymi. Pakiet zawiera następujące zajęcia:

  • Pattern Klasa — definiuje wzorzec (do wykorzystania w wyszukiwaniu)
  • Matcher Klasa — służy do wyszukiwania wzoru
  • PatternSyntaxException Klasa — wskazuje błąd składni we wzorcu wyrażenia regularnego

Przykład

Sprawdź, czy w zdaniu występuje słowo „w3schools”:

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

Przykład wyjaśniony

W tym przykładzie słowo „w3schools” jest wyszukiwane w zdaniu.

Najpierw wzór jest tworzony przy użyciu Pattern.compile()metody. Pierwszy parametr wskazuje, który wzorzec jest przeszukiwany, a drugi parametr ma flagę wskazującą, że wyszukiwanie nie powinno uwzględniać wielkości liter. Drugi parametr jest opcjonalny.

Metoda matcher()służy do wyszukiwania wzorca w ciągu. Zwraca obiekt Matcher, który zawiera informacje o przeprowadzonym wyszukiwaniu.

Metoda find()zwraca true, jeśli wzorzec został znaleziony w ciągu i false, jeśli nie został znaleziony.



Flagi

Flagi w compile()metodzie zmieniają sposób wyszukiwania. Oto kilka z nich:

  • Pattern.CASE_INSENSITIVE- Wielkość liter zostanie zignorowana podczas wyszukiwania.
  • Pattern.LITERAL- Znaki specjalne we wzorcu nie będą miały żadnego specjalnego znaczenia i będą traktowane jak zwykłe znaki podczas wyszukiwania.
  • Pattern.UNICODE_CASE- Użyj go razem z CASE_INSENSITIVEflagą, aby zignorować również wielkość liter spoza alfabetu angielskiego

Wzorce wyrażeń regularnych

Pierwszym parametrem Pattern.compile()metody jest wzorzec. Opisuje, czego szukamy.

Nawiasy służą do znajdowania zakresu znaków:

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

Metaznaki

Metaznaki to znaki o specjalnym znaczeniu:

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

Kwantyfikatory

Kwantyfikatory definiują ilości:

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

Uwaga: Jeśli twoje wyrażenie wymaga wyszukania jednego ze znaków specjalnych, możesz użyć odwrotnego ukośnika ( \ ), aby je zmienić. W Javie ukośniki odwrotne w ciągach muszą być zmieniane same, więc potrzebne są dwa ukośniki odwrotne do ucieczki znaków specjalnych. Na przykład, aby wyszukać jeden lub więcej znaków zapytania, możesz użyć następującego wyrażenia: "\\?"