Heim > Backend-Entwicklung > Golang > Warum wirft Go Regex den Fehler „Ungültige oder nicht unterstützte Perl-Syntax: (?!'' aus und wie kann man ihn umgehen?

Warum wirft Go Regex den Fehler „Ungültige oder nicht unterstützte Perl-Syntax: (?!'' aus und wie kann man ihn umgehen?

Mary-Kate Olsen
Freigeben: 2024-11-16 17:52:03
Original
929 Leute haben es durchsucht

Why Does Go Regex Throw a

Go-Regex-Parsing-Fehler: (?!

Beim Versuch, den folgenden Regex in Go zu kompilieren, tritt ein Fehler auf:

error parsing regexp: invalid or unsupported Perl syntax: (?!
Nach dem Login kopieren

Dieser Fehler ist darauf zurückzuführen, dass die Go-Regex-Engine keine Lookarounds unterstützt, eine Perl-spezifische Syntax Regex-Muster, die das Vorhandensein oder Fehlen spezifischer Muster rund um die aktuelle Position prüfen, was sie für bestimmte komplexe Textabgleichsaufgaben unverzichtbar macht.

Problemumgehung

As Go nicht Um Lookarounds nativ zu unterstützen, besteht die Problemumgehung darin, manuell zu prüfen, ob bestimmte Muster vorhanden sind oder nicht:

^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$
Nach dem Login kopieren

Der folgende Ansatz kann sein eingesetzt:

  • Verwenden Sie zwei separate Regex-Muster, um das Vorhandensein (zweites Muster) und das Fehlen (erstes Muster) des gewünschten Musters zu überprüfen.
  • Kompilieren Sie die Muster:
absencePattern := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")
presencePattern := regexp.MustCompile("^(On.*On\s.+?wrote:$")
Nach dem Login kopieren
  • Führen Sie die Überprüfungen der Eingabe durch Zeichenfolge:
if absencePattern.MatchString(input) && !presencePattern.MatchString(input) {
  // The pattern is absent
} else {
  // The pattern is present
}
Nach dem Login kopieren

Zusätzliche Option

Alternativ können Sie eine optionale Erfassungsgruppe verwenden, um das gleiche Ergebnis zu erzielen:

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
}
Nach dem Login kopieren

Dieser Ansatz macht separate Regex-Muster überflüssig, wodurch der Code vereinfacht und gleichzeitig die gewünschte Funktionalität beibehalten wird.

Das obige ist der detaillierte Inhalt vonWarum wirft Go Regex den Fehler „Ungültige oder nicht unterstützte Perl-Syntax: (?!'' aus und wie kann man ihn umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage