Để 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ỏ . q
khớp với q và nhóm bắt u
khớ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à i
sẽ 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, q
khớp với q và nhóm không bắt u
khớ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à i
sẽ 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, q
khớp với q và u
khớ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ừ i
trong 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 i
khô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, q
khớp với q và u
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ừ u
trong 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à u
sẽ 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ì i
không khớp) và được theo sau bởi một mã thông báo khác. Một lần nữa, q
khớp với q và i
khô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ừ u
trong 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à u
sẽ 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.