Cara Mencontohi Menangkap Kumpulan dalam Go Regular Expressions
Berbeza dengan Ruby dan Java, yang menggunakan ungkapan biasa serasi PCRE yang menyokong penangkapan kumpulan, Go menggunakan pustaka RE2 Google, yang tidak menyediakan fungsi ini secara asli. Artikel ini meneroka cara untuk mencapai kesan yang serupa dalam Go.
Pertimbangkan ungkapan biasa Ruby berikut dengan menangkap kumpulan:
(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})
Corak ini sepadan dengan rentetan tarikh seperti "2001-01-20" dan menangkap nilai tahun, bulan dan hari ke dalam kumpulan bernama yang boleh diakses melalui nama mereka, seperti ["Tahun"].
Untuk mencontohi tingkah laku ini dalam Go, awalan "P" mesti ditambahkan untuk menangkap nama kumpulan:
(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})
Sebagai contoh, kod Go berikut menunjukkan cara untuk menggunakan corak yang diubah suai ini:
package main import ( "fmt" "regexp" ) func main() { r := regexp.MustCompile(`(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})`) fmt.Printf("%#v\n", r.FindStringSubmatch(`2015-05-27`)) fmt.Printf("%#v\n", r.SubexpNames()) }
Fungsi FindStringSubmatch mengembalikan kumpulan yang ditangkap, manakala SubexpNames menyediakan nama kumpulan penangkap, membolehkan anda mengakses nilai mereka.
Dengan menambahkan awalan "P" untuk menangkap nama kumpulan dan memanfaatkan fungsi SubexpNames, adalah mungkin untuk meniru kefungsian menangkap kumpulan dalam ungkapan biasa Ruby apabila bekerja dengan perpustakaan RE2 Go.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Kumpulan Menangkap Dinamakan dalam Go Regular Expressions?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!