Capturing Groups
Dùng ngoặc đơn (...) nhóm nhiều ký tự thành một đơn vị. Kết quả từng nhóm được lưu, truy xuất qua group(1), group(2)... Group 0 là toàn bộ match.
Ví dụ Capturing Groups
String regex = "(.*)(\\d+)(.*)";
Input: "sample data with 1234 (digits) in middle"
Group 0: sample data with 1234 (digits) in middle
Group 1: sample data with 123
Group 2: 4
Group 3: (digits) in middle
Non-capturing Groups
Cung cấp chức năng nhóm nhưng không lưu kết quả. Cú pháp: (?:...)
Ví dụ Non-capturing Groups
String regex = "(.*)(?:\\d+)(.*)";
Input: "sample data with 1234 (digits) in middle"
Group 0: sample data with 1234 (digits) in middle
Group 1: sample data with 123
Group 2: (digits) in middle
// Group số 2 giờ là group cuối, không có group cho \d+
Khi nào dùng Non-capturing Groups?
- Cần nhóm để áp dụng quantifier (*, +, ?) nhưng không cần lấy nội dung
- Regex phức tạp, muốn giảm overhead lưu group
- Tránh nhầm lẫn index group khi sửa regex
Lưu ý
Non-capturing group không được tính trong group count. matcher.groupCount() chỉ đếm capturing groups.