«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему Go Regex \\b Boundary не работает с латинскими символами?

Почему Go Regex \\b Boundary не работает с латинскими символами?

Опубликовано 8 ноября 2024 г.
Просматривать:176

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

\b Границы с латинскими символами в Go Regex

В мире регулярных выражений Go опция \b border имеет небольшую особенность при работе с латинскими символами. Проблема возникает при попытке определить слова, содержащие латинские символы, такие как ударные гласные и специальные символы.

Рассмотрим следующий пример, в котором мы хотим сопоставить слово «vis», используя параметр границы \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é"))
}

Удивительно, но ожидаемого результата сопоставления «revisé» как false не происходит. Вместо этого оно соответствует истине. Это связано с тем, что \b работает только с границами слов ASCII.

Чтобы решить эту проблему и точно сопоставить латинские символы, мы можем заменить границу \b более инклюзивной альтернативой. Вот пример:

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

Благодаря этой модификации регулярное выражение теперь распознает начало и конец слов, используя комбинацию начала строки (\A), конца строки (\z) и пробела (\s). Результат точно соответствует «vis» как true и «révisé» как false:

true
true
false
false

Этот метод обеспечивает точное совпадение слов независимо от наличия латинских символов.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3