使用するのが最も簡単なのは正規表現とpreg_match_all()
:
preg_match_all( '/(-?\d+(?:\.\d+)?)/', $string, $matches);
結果$matches[1]
には、検索している正確な配列が含まれます。
array(2) {
[0]=>
string(2) "-2"
[1]=>
string(3) "0.5"
}
正規表現は次のとおりです。
( - Match the following in capturing group 1
-? - An optional dash
\d+ - One or more digits
(?: - Group the following (non-capturing group)
\.\d+ - A decimal point and one or more digits
)
? - Make the decimal part optional
)
あなたはそれがデモで働いているのを見ることができます。
編集: OPが質問を更新したので、行列の表現は次のように簡単に解析できますjson_decode()
:
$str = '[ [ -2, 0.5, 4, 8.6 ],
[ 5, 0.5, 1, -6.2 ],
[ -2, 3.5, 4, 8.6 ],
[ -2, 0.5, -3, 8.6 ] ]';
var_dump( json_decode( $str, true));
ここでの利点は、不確実性や正規表現が不要であり、個々の要素すべてを適切に入力できることです(値に応じてintまたはfloatとして)。したがって、上記のコードは次のように出力します。
Array
(
[0] => Array
(
[0] => -2
[1] => 0.5
[2] => 4
[3] => 8.6
)
[1] => Array
(
[0] => 5
[1] => 0.5
[2] => 1
[3] => -6.2
)
[2] => Array
(
[0] => -2
[1] => 3.5
[2] => 4
[3] => 8.6
)
[3] => Array
(
[0] => -2
[1] => 0.5
[2] => -3
[3] => 8.6
)
)