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?
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:
absencePattern := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$") presencePattern := regexp.MustCompile("^(On.*On\s.+?wrote:$")
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!