从查询中获取所有分组字段

时间:2019-07-04 15:47:48

标签: regex go

我需要从查询中获取所有group by字段 https://play.golang.org/p/5h_IExbQb_D

package main

import (
    "fmt"
    "regexp"
)

func main() {
query := `SELECT sum(a) as a, count(b) as b, c as c, d as d, e as e
    FROM table
    group by c, d, e order by c`
    re := regexp.MustCompile(`(group by) ((.)*,?)*`)
    fmt.Printf("%q\n", re.FindAll([]byte(query), -1))

}

它返回:

["group by c, d, e order by c"]

但是预期输出是

["c, d, e"]

2 个答案:

答案 0 :(得分:3)

在您的模式中,您使用3个捕获组。

您可以使用一个捕获组,并在代码中访问该捕获组以捕获c, d, e

\bgroup by (\w+(?:, \w+)*)

说明

  • \bgroup by匹配组by之前是单词边界\b
  • (捕获组
    • \w+匹配1个以上的字符字符
    • (?:, \w+)*重复0+次匹配一个空格和1+个单词字符。
  • )关闭捕获组

您可以使用字符类\w扩展匹配的[\w]并添加您要匹配的内容。

Regex demo

答案 1 :(得分:1)

您可以使用这个:

group by ((?:\S*,\s)+\S*)

Demo