クイック&ダーティ...正規表現なし...仮定:
$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.) 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 引数を使用して関数にラップし、ここにいくつかのコードを保存できます。最良の解決策は、正規表現とも呼ばれる正規表現を使用することです...しかし、明らかに、それらが思い通りに機能しない場合、習得が難しく、デバッグも簡単ではありません。