Reguläre Java -Ausdrücke


Was ist ein regulärer Ausdruck?

Ein regulärer Ausdruck ist eine Zeichenfolge, die ein Suchmuster bildet. Wenn Sie in einem Text nach Daten suchen, können Sie dieses Suchmuster verwenden, um zu beschreiben, wonach Sie suchen.

Ein regulärer Ausdruck kann ein einzelnes Zeichen oder ein komplizierteres Muster sein.

Reguläre Ausdrücke können verwendet werden, um alle Arten von Textsuch- und Textersetzungsoperationen durchzuführen.

Java hat keine eingebaute reguläre Ausdrucksklasse, aber wir können das java.util.regex Paket importieren, um mit regulären Ausdrücken zu arbeiten. Das Paket beinhaltet folgende Klassen:

  • Pattern Klasse - Definiert ein Muster (zur Verwendung in einer Suche)
  • Matcher Klasse - Wird verwendet, um nach dem Muster zu suchen
  • PatternSyntaxException Klasse – Zeigt einen Syntaxfehler in einem regulären Ausdrucksmuster an

Beispiel

Finden Sie heraus, ob das Wort „w3schools“ in einem Satz vorkommt:

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

Beispiel erklärt

In diesem Beispiel wird in einem Satz nach dem Wort „w3schools“ gesucht.

Zuerst wird das Muster mit dem Pattern.compile()Verfahren erstellt. Der erste Parameter gibt an, nach welchem ​​Muster gesucht wird, und der zweite Parameter weist ein Flag auf, um anzugeben, dass bei der Suche die Groß-/Kleinschreibung nicht beachtet werden soll. Der zweite Parameter ist optional.

Die matcher()Methode wird verwendet, um nach dem Muster in einer Zeichenfolge zu suchen. Es gibt ein Matcher-Objekt zurück, das Informationen über die durchgeführte Suche enthält.

Die find()Methode gibt true zurück, wenn das Muster in der Zeichenfolge gefunden wurde, und false, wenn es nicht gefunden wurde.



Flaggen

Flags in der compile()Methode ändern, wie die Suche durchgeführt wird. Hier sind einige davon:

  • Pattern.CASE_INSENSITIVE - Die Groß-/Kleinschreibung wird bei der Suche ignoriert.
  • Pattern.LITERAL - Sonderzeichen im Muster haben keine besondere Bedeutung und werden bei der Suche wie gewöhnliche Zeichen behandelt.
  • Pattern.UNICODE_CASE- Verwenden Sie es zusammen mit dem CASE_INSENSITIVEFlag, um auch die Groß- und Kleinschreibung von Buchstaben außerhalb des englischen Alphabets zu ignorieren

Reguläre Ausdrucksmuster

Der erste Parameter der Pattern.compile()Methode ist das Muster. Es beschreibt, wonach gesucht wird.

Klammern werden verwendet, um eine Reihe von Zeichen zu finden:

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

Metazeichen

Metazeichen sind Zeichen mit besonderer Bedeutung:

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

Quantifizierer

Quantifizierer definieren Mengen:

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

Hinweis: Wenn Ihr Ausdruck nach einem der Sonderzeichen suchen muss, können Sie einen umgekehrten Schrägstrich ( \ ) verwenden, um sie zu maskieren. In Java müssen Backslashes in Strings selbst maskiert werden, also werden zwei Backslashes benötigt, um Sonderzeichen zu maskieren. Um beispielsweise nach einem oder mehreren Fragezeichen zu suchen, können Sie den folgenden Ausdruck verwenden: "\\?"