我有这样的字符串
$str="absdbsasd k=12312 sdasd l=89879 m=ken asddq casdasd"
输出应该像这个
问题是如何处理变量$str上的字符串以获得类似的输出
k=12312
l=89879
m=ken asddq casdasd
我尝试在将空格字符(")替换为"&"之后实现parse_str,但是输出仍然得到错误的答案
k=12312
l=89879
m=ken
有人能帮我吗
假设逻辑是标识符是以=
结尾的单词字符,并且值在下一个标识符到来时结束,但如果值以数字开头,那么该值只需要数字中的第一个单词,我会这样做:
$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',
)
首先,您需要定义字符串的结构,如下所示:
$str = "$first_value k=$secound_value l=$third_value m=$forth_value";
如果结构如我所写,那么就不可能得到你需要的东西,因为没有分隔符或任何其他类型的方法来确定一个值的结束和另一个值开始的位置。看看这个例子:
$str="absdbsasd k=12312 sdasd l=s l=8987 l=s 9 m=ken asddq casdasd"
没有办法从真正的l=
开始。
如果你想添加一些像'
这样的分隔符(并确保它们不会出现在值中),你可以得到这样的东西:
$str="'absdbsasd' k='12312 sdasd l=s' l='8987 l=s 9' m='ken asddq casdasd'"
然后您可以进行preg_match
或preg_split
检查,并获得所需的值。
或者,建议在第一个位置做一个数组。