Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Go Regex Melemparkan "Sintaks Perl Tidak Sah atau Tidak Disokong: (?!" Ralat dan Cara Mengatasinya?

Mengapa Go Regex Melemparkan "Sintaks Perl Tidak Sah atau Tidak Disokong: (?!" Ralat dan Cara Mengatasinya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 17:52:03835semak imbas

Why Does Go Regex Throw a

Go Regex Parsing Error: (?!

Apabila cuba menyusun regex berikut dalam Go, ralat berlaku:

error parsing regexp: invalid or unsupported Perl syntax: (?!

Penyelesaian

Memandangkan Go tidak menyokong cari sekeliling secara asli, penyelesaiannya melibatkan pemeriksaan secara manual sama ada terdapat atau tiada corak tertentu regex:

Pendekatan berikut boleh digunakan:
^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$

Gunakan dua corak regex berasingan untuk menyemak kehadiran (corak kedua) dan ketiadaan (corak pertama) yang diingini corak.
  • Kompilasikan corak:
absencePattern := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")
presencePattern := regexp.MustCompile("^(On.*On\s.+?wrote:$")
Lakukan semakan pada rentetan input:
if absencePattern.MatchString(input) && !presencePattern.MatchString(input) {
  // The pattern is absent
} else {
  // The pattern is present
}
Pilihan Tambahan

Sebagai alternatif, anda boleh menggunakan kumpulan penangkap pilihan untuk mencapai hasil yang sama:

Pendekatan ini menghapuskan keperluan untuk corak regex yang berasingan, memudahkan kod sambil mengekalkan fungsi yang diingini.
pattern := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
if match := pattern.FindStringSubmatch(input); match != nil { // match is nil if no match found
  if match[1] != "" { // Group 1 ends with "On"
    return false
  }
  return true
}

Atas ialah kandungan terperinci Mengapa Go Regex Melemparkan "Sintaks Perl Tidak Sah atau Tidak Disokong: (?!" Ralat dan Cara Mengatasinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn