Heim  >  Artikel  >  Backend-Entwicklung  >  Warum schlägt mein Go-Abgleich mit regulären Ausdrücken fehl und wie kann ich das Problem beheben?

Warum schlägt mein Go-Abgleich mit regulären Ausdrücken fehl und wie kann ich das Problem beheben?

DDD
DDDOriginal
2024-11-24 22:19:18958Durchsuche

Why Does My Go Regular Expression Match Fail, and How Can I Fix It?

Regular Expression Matching schlägt in Go fehl

Begegnungen mit regulären Ausdrücken können verwirrend sein, insbesondere für diejenigen mit weniger Erfahrung. Dies kann sich bei der Arbeit mit Go aufgrund geringfügiger Unterschiede in der Syntax und im Verhalten im Vergleich zu anderen Sprachen wie Python noch verschärfen. Insbesondere können Benutzer vor Herausforderungen stehen, wenn sie versuchen, bestimmte Muster mithilfe regulärer Ausdrücke abzugleichen.

Ein solches Szenario trat kürzlich auf, als ein Benutzer beim Abgleichen einer Zeichenfolge in Go auf ein unerwartetes Verhalten stieß. Der reguläre Ausdruck wurde als „^. =b0x[A-F][A-F]b$“ definiert und soll einem Muster entsprechen, das aus einer beliebigen nicht leeren Zeichenfolge, gefolgt von einem Gleichheitszeichen und einer Hexadezimalzahl mit zwei Hexadezimalziffern besteht.

Zu ihrer Überraschung lieferte der reguläre Ausdruck als Ergebnis „false“, obwohl er in Python korrekt funktionierte. Bei näherer Betrachtung wurde festgestellt, dass die Zeichenfolge des regulären Ausdrucks nicht in rohe String-Literale eingeschlossen war, was sich darauf auswirkt, wie Zeichen in Go interpretiert werden.

Verwendung von rohen String-Literalen, gekennzeichnet durch Anführungszeichen „“ (anstelle von regulären). Anführungszeichen") stellt sicher, dass Escape-Sequenzen und Sonderzeichen innerhalb der Zeichenfolge wörtlich und ohne Interpretation behandelt werden. In diesem Fall stellt das rohe Zeichenfolgenliteral sicher, dass die Backslashes und Hexadezimalzeichen ihre beabsichtigte Bedeutung behalten. Dadurch kann der reguläre Ausdruck korrekt mit dem gewünschten Muster übereinstimmen.

Durch das Einschließen der regulären Ausdruckszeichenfolge in Rohzeichenfolgenliterale, wie unten gezeigt, hat die Abgleichsoperation erfolgreich „true“ zurückgegeben:

var regex string = `^.+=\b0x[A-F][A-F]\b$`

Damit Durch die Anpassung stimmt das Go-Programm nun genau überein und extrahiert das gewünschte Muster aus der angegebenen Eingabezeichenfolge.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Go-Abgleich mit regulären Ausdrücken fehl und wie kann ich das Problem beheben?. 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