\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.
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