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

¿Cuál es la diferencia entre matchs() y find() en Java Regex?

estejava.util.regex.Matcher deuna clase que representa un motor, realiza varias operaciones de coincidencia. Esta clase no tiene constructor, se puede usarmatches()el método de la clase java.util.regex.Pattern crea/obtener este objeto de la clase.

doscoincidir()ydescubrir()los métodos de intento de la clase Matcher para encontrar coincidencias según la expresión regular en la cadena de entrada. Si coinciden, ambos devuelven true, si no se encuentra una coincidencia, ambos métodos devuelven false.

La principal diferencia radica en quematches()El método intenta coincidir con el área completo de la entrada dada, es decir, si intenta buscar un número en una línea, este método devuelve true solo si el número se encuentra en todas las líneas de la entrada.

Ejemplo1

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      String regex = "(.*)(\\d+)(.*);
      String input = "Este es un texto de muestra" 1234, con números entre ellos."
         + "\nEste es el segundo renglón del texto"
         + "\nEste es el tercer renglón del texto"
      //Crear un objeto patrón
      Pattern pattern = Pattern.compile(regex);
      //Crear un objeto Matcher
      Matcher matcher = pattern.matcher(input);
      if(matcher.matches()) {
         else {
      }
         System.out.println("No se encontraron coincidencias");
      }
   }
}

Resultado de salida

no se encuentra una coincidencia

mientras que estefind()El método intenta encontrar el siguiente subcadena que coincide con el patrón, es decir, si se encuentra al menos un elemento coincidente en esta área, este método devuelve true.

Si desee ver un ejemplo a continuación, intentamos coincidir la línea específica con el número central.

Ejemplo2

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      String regex = "(.*)(\\d+)(.*);
      String input = "Este es un texto de muestra" 1234, con números entre ellos."
         + "\nEste es el segundo renglón del texto"
         + "\nEste es el tercer renglón del texto"
      //Crear un objeto patrón
      Pattern pattern = Pattern.compile(regex);
      //Crear un objeto Matcher
      Matcher matcher = pattern.matcher(input);
      //System.out.println("Rango actual: "+input.substring(regStart, regEnd));
      if(matcher.find()) {
         else {
      }
         System.out.println("No se encontraron coincidencias");
      }
   }
}

Resultado de salida

Encontrar coincidencia