正则表达式解析具有已知字符串seprarators的字符串

时间:2012-06-04 22:00:26

标签: php regex

我正在尝试拆分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”键是否在字符串中,可以有一组有限的键

怎么办?

编辑:像这样解决了,tx mario

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

1 个答案:

答案 0 :(得分:1)

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

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

因此在“nameJohnage27sexM”上使用上面的preg_match应该返回数组

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

这样就可以创建数组[“name”=&gt; “John”,......]迭代上面的元素。