如何使用正则表达式从空终止字符串中提取键值对?

时间:2013-11-19 06:29:10

标签: php regex

我有一些键值对数据,我从服务器的请求中回来,看起来像这样。

Key0Value0Key20Value20Key30Value30

我用'0'替换了空字符。我不知道如何使用正则表达式来解决这个问题。

我想拥有像这样的值

[Key]  => Value
[Key2] => Value2
[Key3] => Value3

这是我能得到的最接近的

0(.+?)0(.+?)0(?=0|$)

仅当每个键对值在其前后都有“0”时才有效。因为它会向前看,看它是否能找到第二个“0”或字符串的结尾。

所以我遇到的问题是密钥对的值由相同的分隔符分隔,所以你不能分开它们......不知道数据总是以一个键开头并以一个值结束。交替模式。

所以...简而言之,当regex具有相同的分隔符时,无论如何都要分离键值对吗?

2 个答案:

答案 0 :(得分:1)

如果没有标记语言为您提供可以使用任何其他语言进行调整的Javascript解决方案:

var re = /([^0]+)0([^0]+)/g,
    matches = {},
    input = "Key0Value0Key20Value20Key30Value30";
while (m = re.exec(input)) matches[m[1]] = m[2];

console.log(matches);
//=> Object {Key: "Value", Key2: "Value2", Key3: "Value3"}

编辑:PHP解决方案

$re = "/([^0]+)0([^0]+)/"       
$input = 'Key0Value0Key20Value20Key30Value30'
$matches = array();

preg_match_all($re, $input, $matches);    
$output = array_combine($matches[1], $matches[2]);

print_r($output); 
//=> Array( [Key] => Value [Key2] => Value2 [Key3] => Value3

答案 1 :(得分:0)

如果我理解你的问题,你想得到的是:

Key0Value (pair 1)
Key20Value2 (pair 2)
Key30Value3 (pair 3)

然后通过删除中间的零来提取每对中的键和值,对吗?

您可以使用此正则表达式来获取对:(.+?0.+?)0|0(.+?0.+?)