」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?

為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?

發佈於2024-11-08
瀏覽:320

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

\b Go 正規表示式中拉丁文字元的邊界

在Go 正規表示式的世界中, \b 邊界選項有一個輕微的怪癖處理拉丁字符時。當嘗試定義包含拉丁字元(例如重音元音和特殊字元)的單字時,就會出現此問題。

考慮以下範例,我們希望使用 \b 邊界選項來匹配單字「vis」:

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

令人驚訝的是,將「révisé」配對為 false 的預期結果並未出現。相反,它匹配為 true。這是因為 \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

無論是否存在拉丁字符,此技術都可確保準確的單字匹配。

最新教學 更多>
  • 如何在 Java 中有效地計算檔案或資料夾的大小?
    如何在 Java 中有效地計算檔案或資料夾的大小?
    在Java 中取得檔案或資料夾的大小檢索檔案或資料夾的大小是處理檔案時的常見任務在爪哇。以下是如何有效地做到這一點:取得檔案大小要取得檔案的大小,您可以使用java.io 上的length() 方法.文件對象。這將傳回檔案的長度(以位元組為單位),如果檔案不存在,則傳回 0。 java.io.Fil...
    程式設計 發佈於2024-11-08
  • 變數第 04 部分
    變數第 04 部分
    মনে করুন আপনি চা খাবেন। না, চা না। কফিই খান। প্রোগ্রামার হচ্ছেন কফি তো খেতেন পারেন। কফিকে প্রোগ্রামারদের সঙ্গি বললে ভুল হবে না । যাই হোক। এখন কফি তৈর...
    程式設計 發佈於2024-11-08
  • 當我開始使用 React 時我希望知道的事情
    當我開始使用 React 時我希望知道的事情
    3年React開發經驗教訓 當我第一次投入 React 時,感覺就像打開了潘朵拉魔盒。有很多東西要學,一路上,我遇到了很多「啊哈!」的情況。時刻。以下是我希望在開始時就知道的 10 件事,以幫助您在 React 之旅中跳過一些減速帶。 1. 元件只是函數 最重要的認知? React...
    程式設計 發佈於2024-11-08
  • 使用 Golang 編寫打字速度測試 CLI 應用程式
    使用 Golang 編寫打字速度測試 CLI 應用程式
    必須認真考慮這個標題嗎? ……現在我們已經解決了這個問題,讓我們寫一些該死的程式碼:) 泵浦煞車?尖叫……讓我們對今天要嘗試建立的內容做一些介紹。如果標題不明顯,我們將建立一個 CLI 應用程式來計算您在 golang 中的打字速度 - 儘管您可以使用您選擇的任何程式語言遵循相同的技術來建立相同的應...
    程式設計 發佈於2024-11-08
  • 為什麼我的 Bootstrap 模態不工作? ($(...).modal 不是函數)
    為什麼我的 Bootstrap 模態不工作? ($(...).modal 不是函數)
    TypeError: $(...).modal is not a function with Bootstrap Modal您在嘗試執行以下操作時遇到此錯誤動態地將Bootstrap 模式插入HTML 並使用jQuery 觸發它。讓我們深入研究一下問題:錯誤表明“$().modal”函數不被jQue...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中建立遞歸匿名函數?
    如何在 PHP 中建立遞歸匿名函數?
    創建遞歸匿名 PHP 函數在 PHP 中創建遞歸匿名函數可能會很有利。下面的程式碼示範如何完成此操作,傳遞一個函數作為參考。 $factorial = function( $n ) use ( &$factorial ) { if( $n == 1 ) return 1; ...
    程式設計 發佈於2024-11-08
  • 為什麼雙擊顯示/隱藏按鈕僅在第二次調用時起作用?
    為什麼雙擊顯示/隱藏按鈕僅在第二次調用時起作用?
    為什麼第一次使用時雙擊顯示/隱藏按鈕? 在網頁中,按鈕的作用是顯示或隱藏一個元素,但它需要雙擊其初始呼叫。經檢查發現按鈕的代碼為:function showhidemenu() { var x = document.getElementById("menu"); if (...
    程式設計 發佈於2024-11-08
  • 網格佈局:初學者的終極指南
    網格佈局:初學者的終極指南
    歡迎回到您的 CSS 冒險!今天,我們將深入研究網頁設計工具庫中最強大的工具之一:CSS 網格佈局。將其視為佈局技術的瑞士軍刀 - 多功能、精確,並且能夠將您的網頁轉變為組織精美的傑作。準備好接受並承受它了嗎?我們走吧! 什麼是 CSS 網格佈局? 想像一下,您正在玩​​俄羅斯方塊...
    程式設計 發佈於2024-11-08
  • 了解 Python 字典:完整概述
    了解 Python 字典:完整概述
    Python 字典是 Python 程式設計中最通用且使用最廣泛的資料結構之一。它們是內建資料類型,允許開發人員將資料儲存在鍵值對中,這使得它們對於各種應用程式非常有用。在本文中,我們將探討什麼是字典、如何使用它們,並提供範例來說明其功能。 什麼是字典? Python 字典是無序的...
    程式設計 發佈於2024-11-08
  • 如何更改 H1 標籤中最後一個單字的顏色?
    如何更改 H1 標籤中最後一個單字的顏色?
    更改 H1 中最後一個單字顏色的解決方案在 Web 開發領域,使用 CSS 設計元素樣式是基本實踐。然而,當涉及到改變 H1 標籤中最後一個單字的顏色時,原生 CSS 就顯得不夠了。不過,不用擔心,因為有一個超出傳統 CSS 範圍的解決方案。 為了實現這個效果,我們轉向 JavaScript 函式庫...
    程式設計 發佈於2024-11-08
  • 角度訊號和 RxJS 的新功能
    角度訊號和 RxJS 的新功能
    1) Signals 與 RxJS:在 Angular 16 中從頭開始建立 Signal 變數並將其與 Observable 進行比較。 以我們有側邊欄選單和頂部選單的範例為例,每次按下按鈕時,頂部選單都會告訴側邊欄選單折疊: 使用 RxJS: 這種通訊是在使用主題和可觀察量的服務中完成的,每次...
    程式設計 發佈於2024-11-08
  • 實作 malloc() 和 free() — 首先重複使用舊內存
    實作 malloc() 和 free() — 首先重複使用舊內存
    在本系列关于实现 malloc() 和 free() 的上一篇文章中,我们展示了如何通过释放新块来重用内存块并减少堆。然而,当前的函数引入了一个微妙的问题:它优先考虑重用较新的块,这可能会导致内存消耗随着时间的推移而增加。为什么会发生这种情况?让我们来分解一下。 通过重用最近的块来减...
    程式設計 發佈於2024-11-08
  • Java 中的封裝與抽象:終極指南
    Java 中的封裝與抽象:終極指南
    学习 Java 或任何面向对象编程 (OOP) 语言时,两个基本概念很突出:封装 和 抽象。这些概念是 OOP 的关键支柱,可提高代码的可重用性、安全性和可维护性。尽管它们经常一起使用,但它们具有不同的目的。 在这篇文章中,我们将深入探讨封装和抽象之间的差异,并通过清晰的定义、示例和代码片段来帮助您...
    程式設計 發佈於2024-11-08
  • Zustand原始碼中的createWithEqualityFnImpl有解釋。
    Zustand原始碼中的createWithEqualityFnImpl有解釋。
    在這篇文章中,我們將透過記錄它的一些值來分析createWithEqualityFnImpl是如何實現的,以便更好地理解。 從上圖可以看出,createWithEqualityFn 呼叫了函數 createWithEqualityFnImpl。此模式在 vanilla.ts 中使用,如下所示: e...
    程式設計 發佈於2024-11-08
  • 為什麼在 Java 中應避免使用常數介面?
    為什麼在 Java 中應避免使用常數介面?
    接口常量的令人困惑的目的在Java 中,可以在接口中聲明字段,使它們隱式地公開、靜態和公開。最終的。這在開發人員中引起了疑問。 常數介面陷阱與預期相反,在介面內定義常數被視為「常量介面反模式」。正如 Joshua Bloch 在《Effective Java》中所述,這種做法不必要地向使用者暴露了實...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3