首頁  >  文章  >  後端開發  >  為什麼我的正規表示式否定集在 Go 中失敗?

為什麼我的正規表示式否定集在 Go 中失敗?

Patricia Arquette
Patricia Arquette原創
2024-10-26 03:14:27766瀏覽

Why Does My Regex Negated Set Fail in Go?

正則表達式否定集在Go 中不起作用

在這篇文章中,我們探索了一個無法匹配Golang 中字符字串的正規表示式,因為它在線上正規表示式解析器中執行此操作。這個問題源自於 Go 的標準函式庫的正規表示式引擎 RE2 不支援否定集。

有問題的正規表示式旨在匹配以下字串:

  • 以檔案副檔名結尾(例如,“.htm”、“.html”、“.class” 、「.js」)作為負集合(即,不以這些副檔名結尾)。
  • 以任何未提及的字元結尾在負集中而不是句點(.)

在Golang 中實現此表達式不會產生與在線正則表達式解析器演示的相同的匹配,因為Golang 標準庫使用的RE2 缺乏對環視運算符,例如負向先行運算符(“?!”)。

要解決此問題,我們有兩個選項:

  • 使用支援環視的函式庫: 我們可以使用支援lookaround的函式庫來實現負lookahead,例如“github.com/google/re2/regexp”套件。
  • 簡化表達式:如果我們都需要確保字串以三個字元的檔案副檔名結尾,我們可以將表達式簡化為“.w{3}$”,它匹配文字句點,後面跟著字串末尾的三個字元。

透過使用這兩種方法中的任何一種,我們都可以在 Golang 中實現所需的匹配行為。

以上是為什麼我的正規表示式否定集在 Go 中失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn