English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Was ist der Unterschied zwischen matchs() und find() in Java Regex?

derjava.util.regex.MatcherKlasse repräsentiert einen Motor, der verschiedene Match-Operationen durchführt. Diese Klasse hat keinen Konstruktor und kann mitmatches()von der Methode der Klasse java.util.regex.Pattern erstellt/Objekte dieser Klasse zu erhalten.

zweimatch()undentdecken()der Versuche der Matcher-Klasse, auf Basis des regulären Ausdrucks in der Eingabe eine Übereinstimmung zu finden. Wenn eine Übereinstimmung gefunden wird, geben beide true zurück, wenn keine Übereinstimmung gefunden wird, geben beide false zurück.

Der Hauptunterschied liegt darinmatches()Der Methodenversuch, den gesamten Bereich der gegebenen Eingabe zu matchen, also wenn Sie versuchen, eine Nummer in einer Zeile zu suchen, gibt diese Methode nur dann true zurück, wenn die Eingabe in allen Zeilen des Bereichs Nummern enthält.

Beispiel1

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      String regex = "(.*) (\\d+) (.*)";
      String input = "Dies ist ein Beispieltext ", 1234, mit Nummern dazwischen. "
         + "\n Dies ist die zweite Zeile im Text "
         + "\n Dies ist die dritte Zeile im Text "
      //Ein Muster-Objekt erstellen
      Pattern pattern = Pattern.compile(regex);
      //Ein Matcher-Objekt erstellen
      Matcher matcher = pattern.matcher(input);
      if(matcher.matches()) {
         System.out.println("Ein Übereinstimmung finden kann gefunden werden.");
      } else {
         System.out.println("Ein Übereinstimmung finden kann nicht gefunden werden.");
      }
   }
}

Ergebnis ausgeben

kein Treffer gefunden

aber dasfind()Der Methodenversuch, den nächsten Untertest mit dem Muster zu matchen, also wenn im Bereich mindestens ein Treffer gefunden wird, gibt diese Methode true zurück.

Wenn Sie die folgenden Beispiele betrachten, versuchen wir, eine bestimmte Zeile mit einer Nummer in der Mitte zu matchen.

Beispiel2

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      String regex = "(.*) (\\d+) (.*)";
      String input = "Dies ist ein Beispieltext ", 1234, mit Nummern dazwischen. "
         + "\n Dies ist die zweite Zeile im Text "
         + "\n Dies ist die dritte Zeile im Text "
      //Ein Muster-Objekt erstellen
      Pattern pattern = Pattern.compile(regex);
      //Ein Matcher-Objekt erstellen
      Matcher matcher = pattern.matcher(input);
      //System.out.println("Aktueller Bereich: ",+input.substring(regStart, regEnd));
      if(matcher.find()) {
         System.out.println("Ein Übereinstimmung finden kann gefunden werden.");
      } else {
         System.out.println("Ein Übereinstimmung finden kann nicht gefunden werden.");
      }
   }
}

Ergebnis ausgeben

Ein Übereinstimmung finden