golang extract unique key, value from a key=value pair string using regex

Issue

I have the following go string:

dbConnStr := "user=someone password=something host=superduperhost sslmode=something"

but the k=v pair code may be in any order, for example:

dbConnStr := "host=superduperhost user=someone password=something"

Notice the difference in the key order and also the missing “sslmode” key in the str.

Also, it is possible that instead of whitespace, the individual k,v pairs may be separated by newline too.

Now I want to extract the unique keys and their corresponding values from the given string, using regexp. If it will help, I can give a list of all the possible keys that may come (username, password, host, sslmode), but I would ideally like a regex solution that works with any list of keys and values.

How to do this ? I understand that it may be possible with regexp.FindStringSubmatch but not able to wrap my head around writing the regexp.

Solution

Got answer to this from golang nuts group.

    var rex = regexp.MustCompile("(\\w+)=(\\w+)")

    conn := `user=someone password=something host=superduperhost
sslmode=something`
    data := rex.FindAllStringSubmatch(conn, -1)

    res := make(map[string]string)
    for _, kv := range data {
        k := kv[1]
        v := kv[2]
        res[k] = v
    }
    fmt.Println(res)

Golang Playground url: https://play.golang.org/p/xSEX1CAcQE

Answered By – Sankar

Answer Checked By – David Goodson (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.