在 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
我正在尝试从查询字符串中检索 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