0

我有这样的字符串

$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

谁能帮帮我。。

4

2 回答 2

0

假设逻辑是标识符是以 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',
)
于 2012-07-30T09:12:22.757 回答
0

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

$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_matchpreg_split检查并得到你想要的值。

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

于 2012-07-30T09:13:01.897 回答