Possessive Quantifier [X?+]
Khớp X xuất hiện một lần hoặc không xuất hiện. Khác với quantifier thông thường: possessive không backtrack.
Ví dụ
package com.tutorialspoint;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PossesiveQuantifierDemo {
private static final String REGEX = "T?+";
private static final String INPUT = "abcdTatW";
public static void main(String[] args) {
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(INPUT);
while (matcher.find()) {
System.out.println("Match String start(): " + matcher.start());
}
}
}
Kết quả
Match String start(): 0
Match String start(): 1
Match String start(): 2
Match String start(): 3
Match String start(): 4
Match String start(): 5
Match String start(): 6
Match String start(): 7
Match String start(): 8
Giải thích
- Regex
T?+khớp: "T" (1 lần) hoặc "" (0 lần - vị trí giữa các ký tự) - Input "abcdTatW" độ dài 8 → 9 vị trí (0-8) đều khớp rỗng hoặc "T" tại vị trí 4
- Possessive
?+không backtrack: một khi khớp rỗng tại vị trí, không thử khớp "T" nữa
So sánh Quantifiers
| Loại | Ký hiệu | Backtrack? |
|---|---|---|
| Greedy | ?, *, + | Có |
| Reluctant | ??, *?, +? | Có (tối thiểu) |
| Possessive | ?+, *+, ++ | Không |