Warum schlägt Gos Regex \\b Boundary mit Nicht-ASCII-Zeichen fehl?

DDD
Freigeben: 2024-10-29 00:26:02
Original
749 Leute haben es durchsucht

Why Does Go's Regex \b Boundary Fail with Non-ASCII Characters?

Golang Regex-Grenzproblem mit Nicht-ASCII-Zeichen

In Go wird erwartet, dass die b-Grenzoption an der Grenze von ASCII-Zeichen übereinstimmt , ausgenommen Akzentzeichen wie é. Dieses Verhalten kann zu unerwarteten Ergebnissen führen, wenn mit Zeichenfolgen gearbeitet wird, die Nicht-ASCII-Zeichen enthalten. Betrachten Sie beispielsweise den folgenden Code:

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    r, _ := regexp.Compile(`\b(vis)\b`)
    fmt.Println(r.MatchString("re vis e")) // True
    fmt.Println(r.MatchString("revise")) // False
    fmt.Println(r.MatchString("révisé")) // True
}</code>
Nach dem Login kopieren

In diesem Beispiel stimmt der reguläre Ausdruck b(vis)b mit der Teilzeichenfolge „vis“ an Wortgrenzen überein. Bei Anwendung auf „révisé“ wird jedoch fälschlicherweise „True“ zurückgegeben, da é nicht als Wortzeichen betrachtet wird. Um dieses Problem zu lösen, können Sie einen alternativen Ansatz verwenden:

<code class="go">r, _ := regexp.Compile(`(?:\A|\s)(vis)(?:\s|\z)`)
fmt.Println(r.MatchString("vis")) // True
fmt.Println(r.MatchString("re vis e")) // True
fmt.Println(r.MatchString("revise")) // False
fmt.Println(r.MatchString("révisé")) // False</code>
Nach dem Login kopieren

Diese Lösung verwendet eine nicht erfassende Gruppe (?:A|s)(vis)(?:s|z), um eine Übereinstimmung mit einer dieser Gruppen zu erzielen die folgenden Zeichen:

  • Anfang der Zeichenfolge (A)
  • Leerzeichen (s)

Dies ahmt das Verhalten von b nach, umfasst jedoch Nicht-ASCII-Zeichen als mögliche Wortgrenzen. Durch die Kombination dieser Komponenten wird „vis“ am Anfang oder Ende eines Worts erfolgreich gefunden, unabhängig von den umgebenden Zeichen.

Das obige ist der detaillierte Inhalt vonWarum schlägt Gos Regex \\b Boundary mit Nicht-ASCII-Zeichen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!