Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 정규식의 수량자 유형


정규 표현식을 구성하는 동안 발생 횟수를 지정하려면 수량자를 사용할 수 있습니다. Java는 greedy quantifier, reluctant quantifier 및 소유 quantifier의 세 가지 유형의 한정자를 지원합니다.

탐욕스러운 수량자 - 욕심 많은 수량자는 기본 수량자입니다. 욕심 많은 수량자는 입력 문자열에서 최대한 일치합니다(가장 긴 일치). 일치하지 않으면 마지막 문자를 남기고 다시 일치합니다.

예시

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter input text: ");
      String input = sc.nextLine();
      String regex = "[0-9]+";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Matching the compiled pattern in the String
      Matcher matcher = pattern.matcher(input);
      System.out.println(""Matched text: );
      while (matcher.find()) {
         System.out.println(matcher.group());
      }
   }
}

출력

Enter input text:
Matched text:
45545

꺼리는 수량사 − non-greedy/reluctant 수량자는 가능한 한 적게 일치합니다. 처음에 non-greedy 수량자는 일치가 발생하지 않으면 첫 번째 문자와 일치하며 입력 문자열에서 다른 문자를 추가하고 일치를 시도합니다. "?"를 넣으면 greedy 한정사 뒤에는 reluctant 또는 non-greedy 한정사가 됩니다.

예시

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter input text: ");
      String input = sc.nextLine();
      String regex = "[0-9]+?";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Matching the compiled pattern in the String
      Matcher matcher = pattern.matcher(input);
      while (matcher.find()) {
         System.out.println(matcher.group());
      }
   }
}

출력

Enter input text:
12345678
1
2
3
4
5
6
7
8

소유 수량사 - 소유 한정사는 greedy 한정사와 비슷하지만 초기에 가능한 한 많은 문자를 일치시키려고 하고 greedy 한정사와 달리 일치가 발생하지 않으면 역추적하지 않는다는 점만 다릅니다.

greedy 한정사 뒤에 "+"를 붙이면 소유 한정사가 됩니다. 다음은 소유 수량사의 목록입니다:

예시

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter input text: ");
      String input = sc.nextLine();
      String regex = "[0-9]++";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Matching the compiled pattern in the String
      Matcher matcher = pattern.matcher(input);
      while (matcher.find()) {
         System.out.print(matcher.group());
         System.out.println();
      }
   }
}

출력

Enter input text:
45678
45678