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

Quais são as diferenças entre matchs() e find() no Regex do Java?

odo java.util.regex.Matcherclasse representa um motor, realiza várias operações de combinação. Esta classe não tem construtor, pode usarmatches()métodos da classe java.util.regex.Pattern criar/obter o objeto deste tipo.

doiscombinar()edescobrir()tentativas do método Matcher da classe para encontrar correspondências com expressões regulares na entrada. Se houver correspondência, ambos retornam true, se não encontrar correspondência, ambos os métodos retornam false.

A principal diferença está namatches()O método tenta combinar todo o campo de entrada, ou seja, se você tentar procurar um número em uma linha, este método retorna true apenas quando o entrada está presente em todas as linhas da área.

Exemplo1

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 é um exemplo de texto," 1234, com números entre eles. "
         + "\n Esta é a segunda linha no texto "
         + "\n Este é a terceira linha no texto "
      //Criar um objeto Pattern
      Pattern pattern = Pattern.compile(regex);
      //Criar um objeto Matcher
      Matcher matcher = pattern.matcher(input);
      if(matcher.matches()) {
         System.out.println("Encontrado o item correspondente");
      } else {
         System.out.println("Não foi encontrado o item correspondente");
      }
   }
}

Resultados de saída

não encontrar correspondência

e afind()O método tenta encontrar o próximo substring que coincide com o padrão, ou seja, se ao menos um item coincide na área, este método retorna true.

Se você olhar para o exemplo a seguir, tentamos combinar a linha específica com o número no meio.

Exemplo2

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 é um exemplo de texto," 1234, com números entre eles. "
         + "\n Esta é a segunda linha no texto "
         + "\n Este é a terceira linha no texto "
      //Criar um objeto Pattern
      Pattern pattern = Pattern.compile(regex);
      //Criar um objeto Matcher
      Matcher matcher = pattern.matcher(input);
      //System.out.println("Range atual: "+input.substring(regStart, regEnd));
      if(matcher.find()) {
         System.out.println("Encontrado o item correspondente");
      } else {
         System.out.println("Não foi encontrado o item correspondente");
      }
   }
}

Resultados de saída

Encontrar o item correspondente