我如何使用正则表达式为每秒值添加一个数字?

时间:2016-11-30 17:01:38

标签: regex

我有text file

如您所见,在每个位置字段中,有10个值。

我想在每个位置字段的第一个开头添加x到每个OTHER值,我将如何使用正则表达式实现此目的?

例如:

#Vestisland
1=
{
    position=
    {
63.500 1892.500 104.000 1882.000 82.500 1896.500 8.000 1833.000 61.000 1893.500         }
    rotation=
    {
0.087 0.000 0.000 0.000 1.571       }
    height=
    {
0.000 0.000 0.000 20.000 0.000      }
}

我想将x添加到以下粗体值。

63.500 1892.500 104.000 1882.000 82.500 1896.500 8.000 1833.000 61.000 1893.500

1 个答案:

答案 0 :(得分:0)

你可以使用PHP,有一个名为preg_replace_callback的便捷函数,可以逐个获取所有匹配项,然后返回所需的所有更改。这是代码:

    <?
$text = '#Vestisland
    1=
    {
        position=
        {
63.500 1892.500 104.000 1882.000 82.500 1896.500 8.000 1833.000 61.000 1893.500         }
        rotation=
        {
0.087 0.000 0.000 0.000 1.571       }
        height=
        {
0.000 0.000 0.000 20.000 0.000      }
    }
#Austisland
    2=
    {
        position=
        {
225.000 1897.000 211.000 1910.000 232.000 1918.000 147.000 1819.000 229.000 1891.000        }
        rotation=
        {
0.000 0.000 0.000 0.000 -0.611      }
        height=
        {
0.000 0.000 0.000 20.000 0.000      }
    }';
$x = 100;
$fun = function($t) use ($x) {
    $t = $t[0];
    $t = explode(' ', $t);
    $t[0] = number_format($t[0] + $x, 3);
    return implode(' ', $t);
};
$outerFun = function($t) use ($x, $fun) {
    $text = $t[0];
    $newText = preg_replace_callback('/[0-9]+\\.[0-9]+ [0-9]+\\.[0-9]+/', $fun, $text);
    return $newText;
};

$allNewText = preg_replace_callback('/position.*?rotation/s', $outerFun, $text);
echo $allNewText;