正则表达式,用于解析具有已知字符串分隔符的字符串


regex to parse a string with known string seprarators

我正在尝试拆分key1value1key2value2的串联字符串问题是我不知道它们是按哪个顺序排列的

$k = preg_split("/(name|age|sex)/", "nameJohnage27sexM");
var_dump($k);
$k = preg_split("/(sex|name|age)/", "age27sexM");
var_dump($k); 

所以我不知道年龄或名字是$k的第 1 个还是第 2 个索引,甚至不知道字符串中是否有"name"键,可以有一组有限的键

怎么办?

编辑:像这样解决,德克萨斯州马里奥

for ($i=1, $n=count($k)-1; $i<$n; $i+=2) {
    $s[$k[$i]] = $k[$i+1];
}
var_dump($s);

这种有点笨拙的模式将返回一个键值列表:

/(?:(name|age|sex)(.+?(?=(?:name|age|sex|'z))))/g

因此preg_match在"nameJohnage27sexM"上使用上述内容应该返回数组

["name", "John", "age", "27", "sex", "MAN"]

这使得通过迭代上面的元素来创建数组 ["name" => "John", ...] 成为可能。