2017-06-02 6 views
-1

を使用して一意のキー、キーの値=値ペアの文字列を抽出golangは、私は、次の外出の文字列を持っている正規表現

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

strのキー順序と欠落した "sslmode"キーの違いに注目してください。

また、空白の代わりに、個々のk、vのペアが改行で区切られている可能性もあります。

ここで、regexpを使用して、指定した文字列から固有のキーと対応する値を抽出します。それが助けになるなら、可能な全ての鍵(ユーザ名、パスワード、ホスト、sslmode)のリストを与えることができますが、キーと値のリストで動作する正規表現のソリューションが理想的です。

これを行う方法?私はregexp.FindStringSubmatchで可能かもしれないが、正規表現を書いて私の頭を包むことができないことを理解する。

+0

物事が複雑になっても。 'lib/pq'の[' parseOpts'](https://github.com/lib/pq/blob/master/conn.go#L420)の実装を見てください。これは、キーと値のペアを 'map [string] string'に分割します。 – putu

答えて

1

ガットはナッツグループをgolangからこれに答える

を。
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遊び場のURL:値は `=`が含まれている場合https://play.golang.org/p/xSEX1CAcQE

+0

私は文字列の最初の部分が静的なままで、その部分が存在するかどうかチェックしたいという同様の場合があります。どうやってやるの?例文字列: 'ACCESS:user = someone password = something host = superduperhost sslmode = something' –

+0

単純なstrings.HasPrefixは十分ではありませんか?そのチェックを正規表現の一部にしたい場合は、今私はそれに熟練した人ではありません。おそらく新しい質問としてそれを聞くことができます。 –

0

個人的に私のようなものを見てみます:((ユーザー

|あなた\ 2 \ 1と値のキーを与えるホスト)=()+ [\ W]

|パスワード。遊び場の

例:

https://play.golang.org/p/6-Ler6-MrY

+0

遊び場で\ 2の文字クラスを拡張する必要があることに注意してください。私は意図的に狭くしておいたのですが、 –

関連する問題