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
| Quantifier | Mô 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ế độ
| Regex | Input | Kết quả |
Greedy \d+ | 12345 | 1 match: "12345" |
Reluctant \d+? | 12345 | 5 matches: "1","2","3","4","5" |
Possessive \d++ | 12345 | 1 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