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)i
untuk berhenti . q
cocok dengan q dan kelompok penangkap u
cocok dengan u . Pertandingan di dalam grup penangkap diambil dan grup penangkap dibuat. Jadi mesin terus berlanjut i
. Dan i
akan cocok dengan saya . Upaya pertandingan terakhir ini berhasil. qui dicocokkan dan grup penangkap dengan u dibuat.
Mari mendaftar q(?:u)i
untuk berhenti . Sekali lagi, q
cocokkan q dan grup yang tidak menangkap u
cocok dengan u . Pertandingan dari grup non-penangkap diambil, tetapi grup penangkap tidak dibuat. Jadi mesin terus berlanjut i
. Dan i
akan cocok dengan saya . Upaya pertandingan terakhir ini berhasil. qui cocok
Mari mendaftar q(?=u)i
untuk berhenti . Lookahead itu positif dan diikuti oleh tanda lain. Sekali lagi, q
cocokkan q dan u
cocokkan dengan u . Sekali lagi, kecocokan dari lookahead harus dibuang, sehingga mesin mundur dari i
string ke u . Lookahead itu berhasil, jadi mesinnya terus berjalan i
. Tapi i
tidak bisa menandingi kamu . Jadi percobaan pertandingan ini gagal.
Mari mendaftar q(?=u)u
untuk berhenti . Lookahead itu positif dan diikuti oleh tanda lain. Sekali lagi, q
cocokkan q dan u
cocokkan dengan u . Kecocokan dari lookahead harus dibuang, sehingga mesin mundur dari u
string ke u . Lookahead itu berhasil, jadi mesinnya terus berjalan u
. Dan u
akan cocok denganmu . Jadi percobaan pertandingan ini berhasil. qu cocok
Mari mendaftar q(?!i)u
untuk berhenti . Bahkan dalam hal ini lookahead bernilai positif (karena i
tidak cocok) dan diikuti oleh token lain. Sekali lagi, q
cocok dengan q dan i
tidak cocok dengan u . Kecocokan dari lookahead harus dibuang, sehingga mesin mundur dari u
string ke u . Lookahead itu berhasil, jadi mesinnya terus berjalan u
. Dan u
akan 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.