Computer >> Máy Tính >  >> Lập trình >> Java

Các loại định lượng trong Java regex


Nếu bạn muốn chỉ định số lần xuất hiện trong khi tạo biểu thức chính quy, bạn có thể sử dụng bộ định lượng. Java hỗ trợ ba loại định lượng là:định lượng tham lam, định lượng miễn cưỡng và định lượng sở hữu.

Bộ định lượng tham lam - Bộ định lượng tham lam là bộ định lượng mặc định. Một bộ định lượng tham lam khớp càng nhiều càng tốt từ chuỗi đầu vào (khớp dài nhất có thể) nếu không khớp xảy ra, nó sẽ để lại ký tự cuối cùng và khớp lại.

Ví dụ

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());
      }
   }
}

Đầu ra

Enter input text:
Matched text:
45545

Bộ định lượng miễn phí - bộ định lượng không tham lam / miễn cưỡng khớp càng ít càng tốt, ban đầu bộ định lượng không tham lam khớp với ký tự đầu tiên nếu không xảy ra khớp, nó sẽ thêm một ký tự khác từ chuỗi đầu vào và cố gắng khớp. Nếu bạn đặt dấu “?” sau một bộ định lượng tham lam, nó trở thành bộ định lượng miễn cưỡng hoặc không tham lam.

Ví dụ

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());
      }
   }
}

Đầu ra

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

Bộ định lượng sở hữu - Một bộ định lượng sở hữu tương tự như một bộ định lượng tham lam, điểm khác biệt duy nhất là nó cố gắng khớp với nhiều ký tự nhất có thể ban đầu và nếu khớp không xảy ra không giống như bộ định lượng tham lam, nó sẽ không lùi lại.

Nếu bạn đặt dấu "+" sau bộ định lượng tham lam, nó sẽ trở thành bộ định lượng sở hữu. Sau đây là danh sách các bộ định lượng sở hữu:

Ví dụ

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();
      }
   }
}

Đầu ra

Enter input text:
45678
45678