我有一些键值对数据,我从服务器的请求中回来,看起来像这样。
Key0Value0Key20Value20Key30Value30
我用'0'替换了空字符。我不知道如何使用正则表达式来解决这个问题。
我想拥有像这样的值
[Key] => Value
[Key2] => Value2
[Key3] => Value3
这是我能得到的最接近的
0(.+?)0(.+?)0(?=0|$)
仅当每个键对值在其前后都有“0”时才有效。因为它会向前看,看它是否能找到第二个“0”或字符串的结尾。
所以我遇到的问题是密钥对的值由相同的分隔符分隔,所以你不能分开它们......不知道数据总是以一个键开头并以一个值结束。交替模式。
所以...简而言之,当regex具有相同的分隔符时,无论如何都要分离键值对吗?
答案 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.+?)