Untuk lebih memahami, mari terapkan tiga ekspresi plus grup penangkap dan analisis setiap perilaku.
() grup penangkap - ekspresi reguler di dalam tanda kurung harus cocok dan kecocokan membuat grup penangkap
(?:) non capturing group - regex di dalam tanda kurung harus cocok tetapi tidak membuat grup penangkap
(?=) positif melihat ke depan - menegaskan bahwa ekspresi reguler harus dicocokkan
(?!) pandangan negatif ke depan - menegaskan bahwa tidak mungkin untuk mencocokkan ekspresi reguler
Mari mendaftar q(u)iuntuk berhenti . qcocok dengan q dan kelompok penangkap ucocok dengan u . Pertandingan di dalam grup penangkap diambil dan grup penangkap dibuat. Jadi mesin terus berlanjut i. Dan iakan cocok dengan saya . Upaya pertandingan terakhir ini berhasil. qui dicocokkan dan grup penangkap dengan u dibuat.
Mari mendaftar q(?:u)iuntuk berhenti . Sekali lagi, qcocokkan q dan grup yang tidak menangkap ucocok dengan u . Pertandingan dari grup non-penangkap diambil, tetapi grup penangkap tidak dibuat. Jadi mesin terus berlanjut i. Dan iakan cocok dengan saya . Upaya pertandingan terakhir ini berhasil. qui cocok
Mari mendaftar q(?=u)iuntuk berhenti . Lookahead itu positif dan diikuti oleh tanda lain. Sekali lagi, qcocokkan q dan ucocokkan dengan u . Sekali lagi, kecocokan dari lookahead harus dibuang, sehingga mesin mundur dari istring ke u . Lookahead itu berhasil, jadi mesinnya terus berjalan i. Tapi itidak bisa menandingi kamu . Jadi percobaan pertandingan ini gagal.
Mari mendaftar q(?=u)uuntuk berhenti . Lookahead itu positif dan diikuti oleh tanda lain. Sekali lagi, qcocokkan q dan ucocokkan dengan u . Kecocokan dari lookahead harus dibuang, sehingga mesin mundur dari ustring ke u . Lookahead itu berhasil, jadi mesinnya terus berjalan u. Dan uakan cocok denganmu . Jadi percobaan pertandingan ini berhasil. qu cocok
Mari mendaftar q(?!i)uuntuk berhenti . Bahkan dalam hal ini lookahead bernilai positif (karena itidak cocok) dan diikuti oleh token lain. Sekali lagi, qcocok dengan q dan itidak cocok dengan u . Kecocokan dari lookahead harus dibuang, sehingga mesin mundur dari ustring ke u . Lookahead itu berhasil, jadi mesinnya terus berjalan u. Dan uakan cocok denganmu . Jadi percobaan pertandingan ini berhasil. qu cocok
Jadi, kesimpulannya, perbedaan nyata antara grup lookahead dan non-capturing adalah jika Anda hanya ingin menguji keberadaan atau menguji dan menyimpan pertandingan. Menangkap grup itu mahal jadi gunakan dengan bijaksana.