又快又脏……没有正则表达式……假设:
$out = "5 minute input rate 134000 bits/sec, 164 packets/sec"
是您要创建数组的字符串,格式如下:
array(
'time' => '5',
'input' => '134000',
'packets'=> '164'
);
一个可读的非正则表达式解决方案(这可以做得更短,但我想让它明显)
1.)从开始到第一次出现分隔符字符串获取文本:
// find time time interval
$timeDelimiter = " minute" // set the delimiter
$timeEnd = strpos($out, $timeDelimiter); // find the first occurence of delimiter
$time = substr($out, 0, $timeEnd)); // set time to substring before delimiter
现在把这部分从你的弦上剥下来......
$out = substr($out, $timeEnd + strlen($timeDelimiter)); // strip the processed part from $out
2.) 获取两个分隔符字符串之间的文本
// find the input interval
$inputDelimiterStart = "input rate ";
$inputDelimiterEnd = " bits/sec";
$inputStartPos = strpos($out, $inputDelimiterStart) + strlen($inputDelimiterStart);
$inputEndPos = strpos($out, $inputEndDelimiter);
$input = substr($out, $inputStartPos, $inputEndPos);
然后再次剥离您已经处理的内容
$out = substr($out, $inputEndPos + strlen($inputDelimiterEnd));
3.) ....同样的数据包游戏...(我把它放在这里了..你明白了)
现在你有了 $time, $input, $packets ... 像这样输出 JSON:
echo json_encode(
array(
'time' => $time,
'input' => $input,
'packets' => $packets,
)
);
您可以将这些东西包装到一个带有 startDelimiter、endDelimiter 参数的函数中,并在此处保存一些代码。最好的解决方案是使用正则表达式,也就是正则表达式……但显然,如果它们不能按照您想要的方式工作,它们会更难学习,也不容易调试。