Fehler beim Parsen von Regex: Ungültige Perl-Syntax – Das Problem verstehen und eine Problemumgehung finden
Beim Versuch, den regulären Ausdruck „^(? !On.*On\s. ?wrote:)(On\s(. ?)wrote:)$" in Go, ein gemeinsames Der aufgetretene Fehler ist:
error parsing regexp: invalid or unsupported Perl syntax: (?!
Dieser Fehler ist auf die Tatsache zurückzuführen, dass Go keine Lookarounds unterstützt, eine Syntaxfunktion, die in regulären Perl-Ausdrücken verfügbar ist und negative Lookaheads wie (?!.
ermöglicht Lookaround-Syntax verstehen
In regulären Ausdrücken ist ein Lookaround ein Metazeichen, das a bestätigt Bedingung, ohne Zeichen aus der Eingabezeichenfolge zu verbrauchen. Ein negativer Lookahead, gekennzeichnet durch (?!, stellt fest, dass der folgende Ausdruck an der aktuellen Position nicht übereinstimmen sollte.
Go Regex Workaround
Da Go keine Lookarounds unterstützt, kann der obige reguläre Ausdruck nicht direkt verwendet werden. Stattdessen gibt es einen Workaround mit mehreren regulären Ausdrücken und bedingten Prüfungen erforderlich:
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 }
Alternativ können Sie eine optionale Erfassungsgruppe verwenden und nach einem erfolgreichen Match den Inhalt der Gruppe überprüfen:
r := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`) match := r.FindStringSubmatch(inputString) if match != nil { // Handle match if match[1] != "" { // Group 1 ends with "On" } }
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie kann man Lookarounds in regulären Go-Ausdrücken umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!