Why Does Go Regex \\b Boundary Fail with Latin Characters?
Nov 03, 2024 am 04:20 AMb Boundaries with Latin Characters in Go Regex
In the world of Go regular expressions, the b boundary option has a slight quirk when dealing with Latin characters. The issue arises when trying to define words containing Latin characters, such as accented vowels and special characters.
Consider the following example, where we want to match the word "vis" using the b boundary option:
<code class="go">import ( "fmt" "regexp" ) func main() { r, _ := regexp.Compile(`\b(vis)\b`) fmt.Println(r.MatchString("re vis e")) fmt.Println(r.MatchString("revise")) fmt.Println(r.MatchString("révisé")) }</code>
Surprisingly, the expected result of matching "révisé" as false doesn't occur. Instead, it matches as true. This is because b operates only on ASCII word boundaries.
To resolve this issue and accurately match Latin characters, we can replace the b boundary with a more inclusive alternative. Here's an example:
<code class="go">import ( "fmt" "regexp" ) func main() { r, _ := regexp.Compile(`(?:\A|\s)(vis)(?:\s|\z)`) fmt.Println(r.MatchString("vis")) fmt.Println(r.MatchString("re vis e")) fmt.Println(r.MatchString("revise")) fmt.Println(r.MatchString("révisé")) }</code>
With this modification, the regex now recognizes the start and end of words using a combination of start of string (A), end of string (z), and whitespace (s). The result accurately matches "vis" as true and "révisé" as false:
true true false false
This technique ensures accurate word matching, regardless of the presence of Latin characters.
The above is the detailed content of Why Does Go Regex \\b Boundary Fail with Latin Characters?. For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Go language pack import: What is the difference between underscore and without underscore?

How to implement short-term information transfer between pages in the Beego framework?

How to convert MySQL query result List into a custom structure slice in Go language?

How do I write mock objects and stubs for testing in Go?

How can I define custom type constraints for generics in Go?

How can I use tracing tools to understand the execution flow of my Go applications?

How to write files in Go language conveniently?
