Menangkap Berbilang Kumpulan Dipetik dalam Go
Artikel ini menangani cabaran menghuraikan rentetan yang mengikut format tertentu: perintah huruf besar diikuti dengan pilihan hujah yang dipetik. Matlamatnya adalah untuk mengekstrak kedua-dua arahan dan argumen sebagai rentetan yang berasingan.
Untuk mengendalikan tugas ini, ungkapan biasa digunakan: re1, _ := regexp.Compile(([A-Z] )(?: " (1 )")*). Kumpulan menangkap pertama ([A-Z] ) sepadan dengan perintah huruf besar, manakala kumpulan menangkap kedua (?: "([^"] )")* sepadan dengan sifar atau lebih banyak hujah yang dipetik.
Walau bagaimanapun, kod yang disediakan hanya menangkap hujah terakhir. Untuk menyelesaikan isu ini, regex yang lebih santai dicadangkan: re1, _ := regexp.Compile(([A-Z] )|(?: "(1 )")). Regex ini menggunakan kesatuan | untuk membenarkan sama ada perintah atau argumen.
Dengan mengubah suai kod kepada:
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`) results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1) fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }</code>
semua argumen kini boleh berjaya ditangkap. Regex yang disemak ini lebih serba boleh, menampung variasi dalam format input yang perintah dan hujah mungkin berlaku dalam susunan yang berbeza.
Atas ialah kandungan terperinci Cara Menangkap Berbilang Kumpulan Dipetik dalam Go: Penyelesaian Regex. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!