在 Go 中模拟负回顾
您的原始正则表达式具有负回顾断言,旨在提取没有任何前面的 @、#、或 / 字符。但是,Go 不支持负向后查找,这给实现此模式带来了障碍。
重写正则表达式
要在没有负向后查找的情况下实现相同的功能,我们可以替换字符集中要排除的字符:
[^@#/]\w.*
如果命令不允许以以下字符开头这些字符,我们可以使用 ^ 锚来强制执行此条件:
(?:^|[^@#\/])\b\w.*
使用 Go 函数的替代方法
或者,考虑使用 Go 函数进行过滤和处理输入字符串:
func Filter(vs []string, f func(string) bool) []string { ... } 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, " ") }
此方法利用过滤函数来排除以指定字符开头的单词,然后将剩余的单词缝合回新字符串。您可以在 http://play.golang.org/p/ntJRNxJTxo 找到 Go Playground 的工作演示。
以上是如何在 Go 正则表达式中模拟否定后向断言?的详细内容。更多信息请关注PHP中文网其他相关文章!