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

Non-capturing Groups trong Java Regular Expressions


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.