Apabila bekerja dengan rentetan yang mengikut corak tertentu, menangkap kumpulan berulang boleh menjadi tugas biasa. Dalam Go, ungkapan biasa ialah alat yang berkuasa untuk tujuan ini.
Pertimbangkan masalah berikut: Menghuraikan rentetan yang terdiri daripada perkataan huruf besar diikuti dengan sifar atau lebih argumen yang disertakan dalam petikan berganda. Matlamatnya adalah untuk mengekstrak kedua-dua perintah (perkataan huruf besar) dan argumen (rentetan petikan).
Kesilapan biasa ialah menggunakan ungkapan biasa seperti:
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`)</code>
Reteks ini hanya menangkap argumen terakhir dalam rentetan. Ubah suai ungkapan untuk membolehkan menangkap berbilang kumpulan argumen:
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)</code>
Sekarang, untuk mengekstrak kedua-dua arahan dan hujah, gunakan fungsi FindAllStringSubmatch dengan tetapan biasa yang diubah suai ungkapan:
<code class="go">results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)</code>
Kumpulan penangkap regex ini ialah:
Akhir sekali, untuk lelaran ke atas keputusan dan pisahkan arahan daripada argumen:
<code class="go">fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }</code>
Dengan menangani kekurangan ungkapan biasa, anda boleh menangkap kumpulan berulang dalam kod Go anda dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Menangkap Berbilang Kumpulan Berulang dalam Ungkapan Biasa dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!