Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Greedy Quantifiers trong Java Regular Expressions


Khái niệm

Greedy quantifiers (mặc định) khớp nhiều nhất có thể, backtrack nếu phần sau fail.

Danh sách

QuantifierMô tả
re*0 hoặc nhiều
re?0 hoặc 1
re+1 hoặc nhiều
re{n}Chính xác n
re{n,}Tối thiểu n
re{n,m}Từ n đến m

Ví dụ: [0-9]+ trên "45545"

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("Nhập văn bản: ");
        String input = sc.nextLine();
        String regex = "[0-9]+";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        System.out.println("Matched text: ");
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

Kết quả

Nhập văn bản: 45545
Matched text:
45545

Giải thích

  • Dù "4", "45", "455"... đều khớp, greedy + ăn hết "45545".
  • Nếu input "45545abc", vẫn khớp "45545" (dừng trước 'a').

So sánh 3 chế độ

RegexInputKết quả
Greedy \d+123451 match: "12345"
Reluctant \d+?123455 matches: "1","2","3","4","5"
Possessive \d++123451 match: "12345" (không backtrack)

Khi nào dùng Greedy?

  • Mặc định, phù hợp hầu hết trường hợp
  • Cần lấy toàn bộ chuỗi con khớp pattern