首页 > 后端开发 > Golang > 如何在 Go 正则表达式中模拟负向后查找?

如何在 Go 正则表达式中模拟负向后查找?

DDD
发布: 2024-11-28 20:49:11
原创
442 人浏览过

How Can I Emulate Negative Lookbehinds in Go Regular Expressions?

在 Go 中模拟负回顾

虽然出于性能原因,Go 本身并不支持正则表达式中的负回顾,但可以采用替代策略来实现类似的功能。

考虑原来的正则表达式:

\b(?<![@#\/])\w.*
登录后复制

由于否定向后查找仅检查字符集,因此可以将其替换为否定字符集本身:

\b[^@#/]\w.*
登录后复制

如果字符可能出现在开头字符串,添加 ^ 锚点:

(?:^|[^@#\/])\b\w.*
登录后复制

对于更精细的方法,可以使用过滤函数实现:

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
}
登录后复制

此过滤函数可以在 Process 函数中使用:

func Process(inp string) string {
    t := strings.Split(inp, " ")
    t = Filter(t, func(x string) bool {
        return strings.Index(x, "#") != 0 &amp;&amp;
            strings.Index(x, "@") != 0 &amp;&amp;
            strings.Index(x, "/") != 0
    })
    return strings.Join(t, " ")
}
登录后复制

总体而言,这些技术可以在 Go 中模拟负向后查找,为此功能缺乏直接语言支持。

以上是如何在 Go 正则表达式中模拟负向后查找?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板