我有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
答案 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;