"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué falla Go Regex \\b Boundary con caracteres latinos?

¿Por qué falla Go Regex \\b Boundary con caracteres latinos?

Publicado el 2024-11-08
Navegar:982

 Why Does Go Regex \b Boundary Fail with Latin Characters?

\b Límites con caracteres latinos en Go Regex

En el mundo de las expresiones regulares de Go, la opción de límite \b tiene una ligera peculiaridad cuando se trata de caracteres latinos. El problema surge al intentar definir palabras que contienen caracteres latinos, como vocales acentuadas y caracteres especiales.

Considere el siguiente ejemplo, donde queremos hacer coincidir la palabra "vis" usando la opción de límite \b:

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é"))
}

Sorprendentemente, el resultado esperado de hacer coincidir "révisé" como falso no ocurre. En cambio, coincide con la verdad. Esto se debe a que \b opera solo en límites de palabras ASCII.

Para resolver este problema y hacer coincidir con precisión los caracteres latinos, podemos reemplazar el límite \b con una alternativa más inclusiva. A continuación se muestra un ejemplo:

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é"))
}

Con esta modificación, la expresión regular ahora reconoce el inicio y el final de las palabras usando una combinación de inicio de cadena (\A), final de cadena (\z) y espacios en blanco (\s). El resultado coincide con precisión con "vis" como verdadero y "révisé" como falso:

true
true
false
false

Esta técnica garantiza una coincidencia precisa de palabras, independientemente de la presencia de caracteres latinos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3