幕布斯7119047
使用一个简单的正则表达式通过preg_match_all,并array_combine往往是最短,最快的选项: preg_match_all("/([^\\\\]+)\\\\([^\\\\]+)/", $string, $p); $array = array_combine($p[1], $p[2]);现在这当然是一个特例。两个键和值由一个分隔\反斜杠,因为都是对它们。由于必要的双重转义,正则表达式也有点长。但是,此方案可以推广到其他key:value,样式的字符串。独特的key:value,分隔符常见的变体包括:和=作为键/值分隔符,和/ ,或&作为对分隔符的其他变体。在这种情况下,正则表达式变得相当明显(带有/x可读性标志): # ↓ ↓ ↓ preg_match_all("/ ([^:]+) : ([^,]+) /x", $string, $p); $array = array_combine($p[1], $p[2]);这使得交换:和,其他分隔符变得非常容易。等号=而不是:冒号。例如,\\t作为对分隔符(制表符分隔键:值列表)经典&或;键=值对之间的分隔符。或者甚至是\\s空格或\\n换行符。允许不同的分隔符您可以通过在键/值/对之间允许不同的分隔符来使其更灵活/更宽容: # ↓ ↓ ↓ preg_match_all("/ ([^:=]+) [:=]+ ([^,+&]+) /x", $string, $p);两者key=value,key2:value2++key3==value3都有效。这对于更多人类友好(AKA非技术用户)来说是有意义的。约束字母数字键通常,您可能希望禁止除经典key标识符之外的任何内容。只需使用\w+单词字符串模式使正则表达式跳过不必要的出现: # ↓ ↓ ↓ preg_match_all("/ (\w+) = ([^,]+) /x", $string, $p);这是最琐碎的白名单方法。如果OTOH要事先断言 /约束整个键/值字符串,那么就要单独制作preg_match("/^(\w+=[^,]+(,|$))+/", …剥离空格或引用您可以通过一些trim小的添加跳过一些后处理步骤(例如在键和值上): preg_match_all("/ \s*([^=]+) \s*=\s* ([^,]+) (?