2

文字列 (JSON データの一部) があり、それを角かっこで解析したい [...]。ここに例があります:

: [-0.5937, 2.0734,-0.1577, 1.7941,0.2048, 1.5296] >>> [-0.5937, 2.0734], [-0.1577, 1.7941], [0.2048, 1.5296]

私が書いたこの PHP コードは問題なく動作しますが、問題は次のとおりです。',' が見つかり、代わりに '], [' 文字を追加すると、座標の一部の桁が削除されます。座標の後に123456789の値を追加することで確認できます。たとえば、-0.5937 => -0.5937123456789 では、座標の数字を削除しないようにするにはどうすればよいですか???

サンプルコード

<?php

$line = '[-0.5937, 2.0734,-0.1577, 1.7941,0.2048, 1.5296]';

$brackets = preg_replace('/\d,\S/', '], [', $line);
echo $brackets;

?>
4

2 に答える 2

0

あなたはこれを行うことができます:

$string = '[-0.5937, 2.0734,-0.1577, 1.7941,0.2048, 1.5296]';
$pattern = '~[[,]\s*(-?\d++(?>\.\d++)?)\s*,\s*(-?\d++(?>\.\d++)?)\s*(?:]|(?=(,)))~';

$result = preg_replace($pattern, '[$1, $2]$3 ', $string);

パターンの詳細:

~                    # pattern delimiter
[[,]                 # a [ or a ,
\s*                  # optional spaces
(-?\d++(?>\.\d++)?)  # a number (group 1)
\s*,\s*              # ,
(-?\d++(?>\.\d++)?)  # (group 2)
\s*
(?:                  # non capturing group
    ]                # literal ]
  |                  # OR
    (?=(,))          # a lookahead that capture the comma (group 3)
)
~
于 2013-08-26T21:20:32.033 に答える
0

これは、アサーションを使用して、パターンが数字と空白以外の文字をキャプチャしないようにすることができます。そのようです:

'/(?<=\d),(?<=\S)/'

または、パターンを次のように変更することもできます。

'/,(?<=\S)/'

数字文字を無視します。

ただし、コードが数字の前のスペースに依存しないようにすることをお勧めします。preg_replace_callbackを使用します。

<?php

$line = '[-0.5937, 2.0734,-0.1577, 1.7941,0.2048, 1.5296]';
$i = 0;

function everyOther($matches) {
  $i++;
  if ($i % 2 == 1)
    return ',';
  else
    return '], [';
}

$brackets = preg_replace_callback(
                '/,/', 
                'everyOther',
                $line);

echo $brackets;

?>

これにより、他のすべてのコンマが置き換えられます。

于 2013-08-26T21:06:34.177 に答える