Ralat Menghuraikan Regex: Sintaks Perl Tidak Sah - Memahami Isu dan Mencari Penyelesaian
Apabila cuba menyusun ungkapan biasa "^(? !Hidup.*Hidup ?menulis:)(Hid\s(. ?)wrote:)$" dalam Go, ralat biasa yang dihadapi ialah:
error parsing regexp: invalid or unsupported Perl syntax: (?!
Ralat ini berpunca daripada fakta bahawa Go tidak menyokong carian, ciri sintaks yang tersedia dalam ungkapan biasa Perl yang membenarkan negatif pandangan ke hadapan seperti (?!.
Memahami Lookaround Sintaks
Dalam ungkapan biasa, lookaround ialah metacharacter yang menegaskan keadaan tanpa menggunakan sebarang aksara daripada rentetan input Pandangan negatif, dilambangkan dengan (?!, menegaskan bahawa ungkapan berikut tidak sepatutnya sepadan pada kedudukan semasa.
Go Regex Penyelesaian
Memandangkan Go tidak menyokong carian, ungkapan biasa di atas tidak boleh digunakan secara langsung, sebaliknya, penyelesaian menggunakan berbilang ungkapan biasa dan semakan bersyarat diperlukan:
r1 := regexp.MustCompile(`^On\s(.+?)wrote:$`) r2 := regexp.MustCompile(`^On.*On\s.+?wrote:`) match1 := r1.MatchString(inputString) match2 := r2.MatchString(inputString) if match1 && !match2 { // The string does not contain "On ... On" but contains "On ..." // Handle match }
Sebagai alternatif. , anda boleh menggunakan kumpulan penangkap pilihan dan semak kandungan kumpulan itu selepas berjaya padanan:
r := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`) match := r.FindStringSubmatch(inputString) if match != nil { // Handle match if match[1] != "" { // Group 1 ends with "On" } }
Nota Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Lookarounds dalam Go Regular Expressions?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!