Heim  >  Artikel  >  Backend-Entwicklung  >  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
Mary-Kate OlsenOriginal
2024-11-16 17:52:03831Durchsuche

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: (?!

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:)$

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:$")
  • 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
}

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
}

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!

Stellungnahme:
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