En PHP, vous pouvez utiliser la fonction Go pour diviser une chaîne de paires clé/valeur séparées par des virgules. Cette fonction est très utile, en particulier lorsqu'il peut y avoir des virgules incorporées dans une paire clé/valeur donnée. Les fonctions Go facilitent la division des paires clé/valeur en parties indépendantes pour un traitement et une utilisation ultérieurs. Qu'il s'agisse de traiter les données d'un formulaire ou d'analyser des fichiers CSV, les fonctions Go peuvent nous aider à accomplir la tâche efficacement. Dans cet article, nous détaillerons comment diviser les paires clé/valeur à l'aide des fonctions Go et fournirons quelques exemples pratiques pour référence. commençons!
Je suis relativement nouveau dans le langage Go et je cherche un moyen de diviser une chaîne de longueur variable en une carte où les paires clé/valeur (toutes les chaînes) sont séparées par des virgules et seulement certaines des variantes de chaînes peut avoir plusieurs virgules et/ou deux-points dans une paire clé/valeur donnée. Par exemple :
Variante String 1 mot-clé1=valeur1,mot-clé2=valeur2,mot-clé3=valeur3,valeur4,valeur5,mot-clé4=valeur6... Variante String 2 mot-clé 1 = valeur 1, mot-clé 2 = valeur 2, mot-clé 3 = valeur 3, valeur 4, valeur 5 : valeur 6, valeur 7, valeur 8, mot-clé 4 = valeur 9...
où "..." reflète le fait qu'il y aura une variable # paire clé/valeur. J'espère finir avec une carte comme celle-ci :
map[string]string{ keyword1: "value1", keyword2: "value2", keyword3: "value3,value4,value5", keyword4: "valu6", }
ou
map[string]string{ keyword1: "value1", keyword2: "value2", keyword3: "value3,value4,value5:value6,value7,value8", keyword4: "valu6", }
Malheureusement, le format des lignes que je vais lire à partir du fichier est assez complexe et mes options pour modifier le format des données entrantes sont limitées. Je travaille là-dessus depuis un certain temps, malheureusement je ne suis pas un expert en expressions régulières, donc toute aide serait grandement appréciée.
Match (global) au lieu de diviser, vous n'avez alors pas besoin de regarder autour de vous : (.*? )=([^=]*)(?:,|$)
. En Go :
package kvparse import ( "regexp" "testing" "reflect" ) var kvPairRe = regexp.MustCompile(`(.*?)=([^=]*)(?:,|$)`) func ParseKV(kvStr string) map[string]string { res := map[string]string{} for _, kv := range kvPairRe.FindAllStringSubmatch(kvStr, -1) { res[kv[1]] = kv[2] } return res } func TestParseKV(t *testing.T) { test := func(kvStr string, expectedMap map[string]string) { gotMap := ParseKV(kvStr) if !reflect.DeepEqual(expectedMap, gotMap) { t.Errorf("Abs(%s) = %v; want %v", kvStr, gotMap, expectedMap) } } test("keyword1=value1,keyword2=value2,keyword3=value3,value4,value5,keyword4=value6", map[string]string{ "keyword1": "value1", "keyword2": "value2", "keyword3": "value3,value4,value5", "keyword4": "value6" }) test("keyword1=value1,keyword2=value2,keyword3=value3,value4,value5:value6,value7,value8,keyword4=value9", map[string]string{ "keyword1": "value1", "keyword2": "value2", "keyword3": "value3,value4,value5:value6,value7,value8", "keyword4": "value9" }) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!