如何在php中处理字符串

如何在php中处理字符串,php,string,Php,String,我有这样的绳子 $str="absdbsasd k=12312 sdasd l=89879 m=ken asddq casdasd" 输出应该是这样的 k=12312 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"
输出应该是这样的

k=12312
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);
    }
}
$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'"
产出:

array (
  'k' => '12312',
  'l' => '89879',
  'm' => 'ken asddq casdasd',
)

首先需要定义字符串的结构,如下所示:

$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);
    }
}
$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'"
如果结构如我所写,那么很难得到您所需要的,因为没有seperator或任何其他类型的方法来确定一个值的结束位置和另一个值的开始位置。 看看这个例子:

$str="absdbsasd k=12312 sdasd l=s l=8987 l=s 9 m=ken asddq casdasd"
没有办法知道真正的
l=
从哪里开始

如果要添加一些分隔符,如
(并确保它们不会出现在值中,则可以得到如下内容:

$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);
    }
}
$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'"
然后,您可以执行
preg_匹配
preg_分割
检查并获得所需的值


或者,建议在第一位创建一个数组。

该字符串中似乎没有多少可用于实现所需输出的目标逻辑。
m
的值中有空格,这会使事情复杂化。为什么k不被解析为
k=12312 sdasd
?为什么支持
m
的空格,而不支持
k
s是我尝试过的原始sintaks..$str=“absdbasd k=12312 sdasd l=89879 m=ken asddq casdasd”$str=str_replace(“,”&“,$str”);parse_str($str);echo$k.“

“echo$l.”echo$m;因为我想要这样的输出。k表示一个数字,m表示一个字符串。你能帮我吗..变量(键)始终是单字符?而且,根据
m
的输出方式,那么
k
的输出应该是
k=12312 sdasd
。不是吗?在这种情况下,不太可能泛化代码,除非对
k
不解析空格的原因有明确的区分。