Heim  >  Artikel  >  Backend-Entwicklung  >  Warum schlägt mein durch Regex negierter Satz in Go fehl?

Warum schlägt mein durch Regex negierter Satz in Go fehl?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 03:14:27666Durchsuche

Why Does My Regex Negated Set Fail in Go?

Regex-Ausdrucksnegierter Satz funktioniert in Go nicht

In diesem Beitrag untersuchen wir einen Regex-Ausdruck, der keine Zeichenfolgen in Golang abgleichen kann funktioniert in Online-Regex-Parsern. Das Problem ist darauf zurückzuführen, dass die negierte Menge in der Regex-Engine der Standardbibliothek von Go, RE2, nicht unterstützt wird.

Der betreffende reguläre Ausdruck ist so konzipiert, dass er mit Zeichenfolgen übereinstimmt, die:

  • mit einer Dateierweiterung enden (z. B. „.htm“, „.html“, „.class“, „.js“) als negative Menge (d. h. nicht mit diesen Erweiterungen enden).
  • Ende mit einem beliebigen Zeichen, das nicht erwähnt wird in der negativen Menge und nicht in einem Punkt (.)

Die Implementierung dieses Ausdrucks in Golang führt nicht zu den gleichen Übereinstimmungen, wie der Online-Regex-Parser demonstriert, da RE2, das von Golangs Standardbibliothek verwendet wird, nicht unterstützt wird Lookaround-Operatoren wie der negative Lookahead-Operator („?!“).

Um dieses Problem zu beheben, haben wir zwei Möglichkeiten:

  • Verwenden Sie eine Lookaround-unterstützende Bibliothek: Wir können den negativen Lookahead mit einer Bibliothek implementieren, die Lookaround unterstützt, wie zum Beispiel dem Paket „github.com/google/re2/regexp“.
  • Vereinfachen Sie den Ausdruck: Wenn wir alle Wenn sichergestellt werden muss, dass die Zeichenfolge mit einer dreistelligen Dateierweiterung endet, können wir den Ausdruck zu „.w{3}$“ vereinfachen, was einem Literalpunkt gefolgt von drei Zeichen am Ende der Zeichenfolge entspricht.

Durch die Verwendung eines dieser Ansätze können wir das gewünschte Matching-Verhalten in Golang erreichen.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein durch Regex negierter Satz in Go fehl?. 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