論理的には、識別子は a で終わる単語の文字であり=
、値は次の識別子が来ると終了しますが、値が数字で始まる場合、値に必要な数字の最初の単語のみであると仮定すると、次のようになります。
$str="absdbsasd k=12312 sdasd l=89879 m=ken asddq casdasd";
$parts = preg_split('/(\w+=)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
$result = array();
$prev_was_an_identifier = false;
$last_identifier = null;
foreach ($parts as $part) {
if ($prev_was_an_identifier) {
if (preg_match('/^\d+/', $part)) {
$result[$last_identifier] = preg_replace('/^(\d+).*/', '$1', $part);
} else {
$result[$last_identifier] = $part;
}
$prev_was_an_identifier = false;
} elseif (preg_match('/=$/', $part)) {
$prev_was_an_identifier = true;
$last_identifier = mb_substr($part, 0, -1);
}
}
出力:
array (
'k' => '12312',
'l' => '89879',
'm' => 'ken asddq casdasd',
)