首頁 > 後端開發 > Golang > 如何在 Go 正規表示式中模擬負向後尋找?

如何在 Go 正規表示式中模擬負向後尋找?

Susan Sarandon
發布: 2024-11-29 12:59:10
原創
758 人瀏覽過

How Can I Simulate Negative Lookbehind in Go Regular Expressions?

Go 中的負後向模擬

在 Go 中,出於性能原因,不支援負後向斷言。當嘗試使用lookbehind運算子來匹配模式時,這可能會帶來挑戰。

例如,負lookbehind可能用於從字串中提取命令,排除集合[@#/]中的任何前導字元。使用負回顧斷言:

\b(?<![@#\/])\w.*
登入後複製

但是,由於缺乏對負回顧的支持,此正則表達式將無法在 Go 中編譯。

替代方法

相反,我們可以用否定的字符集替換否定的lookbehind,它可以匹配任何字符不在集合中。

更新了正規表示式:

\b[^@#/]\w.*
登入後複製

如果字串開頭允許使用集合 [@#/] 中的前導字符,我們可以使用 ^錨點:

(?:^|[^@#\/])\b\w.*
登入後複製

過濾函數

或者,我們可以使用Go中的過濾函數來過濾掉以[@#/]集合中的字元開頭的字串。

func Filter(vs []string, f func(string) bool) []string {
    vsf := make([]string, 0)
    for _, v := range vs {
        if f(v) {
            vsf = append(vsf, v)
        }
    }
    return vsf
}
登入後複製

處理函數

我們也可以建立一個使用濾波器的處理函數:

func Process(inp string) string {
    t := strings.Split(inp, " ")
    t = Filter(t, func(x string) bool {
        return strings.Index(x, "#") != 0 &&
               strings.Index(x, "@") != 0 &&
               strings.Index(x, "/") != 0
    })
    return strings.Join(t, " ")
}
登入後複製

此處理函數可用於轉換輸入字串,從集合[@#/] 中刪除以字元開頭的任何單字。

以上是如何在 Go 正規表示式中模擬負向後尋找?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板