Regex Tidak Berfungsi dalam Go: Memahami Masalah
Walaupun nampak kesederhanaan corak ungkapan biasa, mengapa ia gagal dipadankan dalam Pergi? Mari kita mendalami isu ini dan temui penyelesaiannya.
Kod dan Output Asal
Pertimbangkan kod Go berikut:
package main import ( "fmt" "regexp" ) func main() { a := "parameter=0xFF" regex := "^.+=\b0x[A-F][A-F]\b$" result, err := regexp.MatchString(regex, a) fmt.Println(result, err) }
Anehnya, output adalah palsu
Rentetan Mentah untuk Menyelamat
Kunci untuk menyelesaikan isu ini terletak pada penggunaan literal rentetan mentah dalam mentakrifkan corak ungkapan biasa. Literal rentetan mentah ialah jujukan aksara yang disertakan dalam petikan belakang (`) dan bukannya petikan berganda (").
Dengan menggunakan literal rentetan mentah, anda menghalang Go daripada mentafsir garis miring ke belakang sebagai aksara melarikan diri. Ini penting kerana corak mengandungi jujukan melarikan diri (b dan x) yang mentakrifkan keadaan padanan tertentu.
Kod Dikemas Kini
Dengan rentetan mentah literal, kod itu menjadi:
var regex string = `^.+=\b0x[A-F][A-F]\b$`
Penjelasan Corak
Corak yang dikemas kini sepadan dengan rentetan yang memenuhi kriteria berikut:
Kesimpulan
Dengan menggunakan literal rentetan mentah, kami memastikan corak ungkapan biasa ditafsirkan dengan betul dalam Go. Ini membolehkan corak padan dengan tepat rentetan input yang dikehendaki, seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapa My Go Regex Tidak Padan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!