在 Go 中不向前看就匹配前面的单词

Match proceeding word without look ahead in Go

我正在尝试从查询字符串中检索 table(例如,'select foo from bar limit 10' 应该 return 'bar')。

我相信“(?<=\bfrom\s)(\w+)”是我要找的,但 Go 正则表达式包不支持它。 (http://play.golang.org/p/MJ3DUk6uuC)

您仍然可以检测到“from xxx”,而无需查看前瞻语法 not supported by re2.
由于您随后会捕获“from”,因此您需要将其从结果中删除。

参见playground

r := regexp.MustCompile("(?:\bfrom\s)(\w+)")
res := r.FindAllString(strings.ToLower("select foo from bar limit 10"), 1)
if len(res) != 1 {
    panic("unable")
}
i := strings.LastIndex(res[0], " ")
fmt.Println(res[0][i+1:], i)

输出:

bar 4