Heim >Backend-Entwicklung >Golang >Warum gibt mein Go-Regex-Code den Fehler „Ungültige oder nicht unterstützte Perl-Syntax: (?!'' aus?

Warum gibt mein Go-Regex-Code den Fehler „Ungültige oder nicht unterstützte Perl-Syntax: (?!'' aus?

Susan Sarandon
Susan SarandonOriginal
2024-11-09 06:16:021076Durchsuche

Why does my Go regex code throw an

Ungültiger Regex-Parsing-Fehler: Verständnis von „Fehler beim Parsen von Regexp: ungültige oder nicht unterstützte Perl-Syntax: (?!““

Beim Auftreten des Fehlers „Fehler beim Parsen des regulären Ausdrucks: ungültige oder nicht unterstützte Perl-Syntax: (?!“, dies weist auf ein Problem in der in verwendeten regulären Ausdruckssyntax hin Go. Dieser spezielle Fehler tritt auf, wenn die negative Lookahead-Syntax von Perl verwendet wird, die das Regexp-Paket von Go nicht unterstützt.

In Ihrem Fall versucht der reguläre Ausdruck:

regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")

eine Zeichenfolge zu finden, die beginnt nicht mit der Sequenz „On. On“, gefolgt von einer Meldung. Go erkennt jedoch nicht die negative Lookahead-Syntax (?!, die eine spezifische Funktion ist Perl.

Lösung:

Um dieses Problem zu lösen, müssen Sie eine alternative Möglichkeit finden, die Übereinstimmungsbedingung auszudrücken, ohne sich auf negative Lookaheads zu verlassen zwei separate reguläre Ausdrücke:

first := regexp.MustCompile(`^On\s(.+?)wrote:$`)
second := regexp.MustCompile(`^On.*On\s.+?wrote:`)

Sie können diese regulären Ausdrücke dann als verwenden folgt:

if first.MatchString(str) && !second.MatchString(str) {
  // The string matches the desired condition
}

Mit diesem Ansatz können Sie feststellen, ob die Zeichenfolge mit dem ersten regulären Ausdruck übereinstimmt (was bedeutet, dass sie nicht „On“ enthält. On“) und stimmt nicht mit dem zweiten regulären Ausdruck überein (d. h., er enthält nicht zweimal „On“).

Zusätzliche Option:

Alternativ können Sie das Original ändern regulärer Ausdruck, um eine optionale Erfassungsgruppe einzuschließen:

regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)

Sie können dann prüfen, ob eine Übereinstimmung vorliegt, und „true“ zurückgeben, wenn die Gruppe 1 (erfasste Teilzeichenfolge) endet mit „Ein“; wenn ja, wird „false“ zurückgegeben, andernfalls „true“.

Das obige ist der detaillierte Inhalt vonWarum gibt mein Go-Regex-Code den Fehler „Ungültige oder nicht unterstützte Perl-Syntax: (?!'' aus?. 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