Để hiểu rõ hơn, hãy áp dụng ba biểu thức cộng với một nhóm nắm bắt và phân tích từng hành vi.
() nhóm chụp - regex bên trong dấu ngoặc đơn phải được khớp và khớp tạo ra một nhóm chụp
(?:) không bắt nhóm - regex bên trong dấu ngoặc đơn phải được khớp nhưng không tạo nhóm bắt
(?=) tích cực nhìn về phía trước - khẳng định rằng regex phải phù hợp
(?!) tiêu cực nhìn về phía trước - khẳng định rằng không thể so sánh với regex
Hãy áp dụng q(u)iđể bỏ . qkhớp với q và nhóm bắt ukhớp với u . Trận đấu bên trong nhóm bắt được thực hiện và nhóm bắt được tạo. Vì vậy, động cơ tiếp tục với i. Và isẽ phù hợp với tôi . Nỗ lực đối sánh cuối cùng này đã thành công. qui được khớp và một nhóm bắt với u được tạo.
Hãy áp dụng q(?:u)iđể bỏ . Một lần nữa, qkhớp với q và nhóm không bắt ukhớp với u . Đối sánh từ nhóm không chụp được thực hiện, nhưng nhóm chụp không được tạo. Vì vậy, động cơ tiếp tục với i. Và isẽ phù hợp với tôi . Nỗ lực đối sánh cuối cùng này đã thành công. qui được kết hợp
Hãy áp dụng q(?=u)iđể bỏ . Nhìn trước là tích cực và được theo sau bởi một mã thông báo khác. Một lần nữa, qkhớp với q và ukhớp với u . Một lần nữa, kết quả phù hợp từ lookahead phải bị loại bỏ, do đó, động cơ lùi từ itrong chuỗi sang u . Nhìn trước đã thành công, vì vậy động cơ tiếp tục với i. Nhưng ikhông thể phù hợp với u . Vì vậy, nỗ lực đối sánh này không thành công.
Hãy áp dụng q(?=u)uđể bỏ . Nhìn trước là tích cực và được theo sau bởi một mã thông báo khác. Một lần nữa, qkhớp với q và ukhớp với u . Kết quả phù hợp từ lookahead phải bị loại bỏ, do đó, động cơ lùi từ utrong chuỗi sang u . Nhìn trước đã thành công, vì vậy động cơ tiếp tục với u. Và usẽ phù hợp với u . Vì vậy, nỗ lực đối sánh này đã thành công. qu là phù hợp
Hãy áp dụng q(?!i)uđể bỏ . Ngay cả trong trường hợp này, lookahead là tích cực (vì ikhông khớp) và được theo sau bởi một mã thông báo khác. Một lần nữa, qkhớp với q và ikhông khớp với u . Kết quả phù hợp từ lookahead phải bị loại bỏ, do đó, động cơ lùi từ utrong chuỗi sang u . Nhìn trước đã thành công, vì vậy động cơ tiếp tục với u. Và usẽ phù hợp với u . Vì vậy, nỗ lực đối sánh này đã thành công. qu là phù hợp
Vì vậy, kết luận lại, sự khác biệt thực sự giữa nhóm nhìn trước và nhóm không chụp là tất cả nếu bạn muốn chỉ kiểm tra sự tồn tại hoặc kiểm tra và lưu kết quả phù hợp. Chụp nhóm rất tốn kém vì vậy hãy sử dụng nó một cách thận trọng.