2016-11-30 1 views
0

나는 text file이 있습니다.정규식을 사용하여 매초마다 값을 추가하는 방법은 무엇입니까?

모든 위치 필드에는 10 개의 값이 있습니다.

각 위치 필드의 첫 번째부터 시작하는 모든 OTHER 값에 x를 추가하고 싶습니다. 어떻게 정규식을 사용합니까? 예를 들어

:

#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

환경/언어는 무엇입니까? – revo

+0

내가 필요한 것을 얻기 위해 간단한 스크립트를 만들 수있는 것은 특별히 필요하지 않습니다. –

+0

정규 표현식을 지정해야합니다. 그렇지 않으면 일반 작업 솔루션이 원하는 결과를 얻기 위해 필요한 단계 이상을 수행 할 수 있습니다. – revo

답변

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; 
+0

우수함, 유일한 문제는이 코드가 원래 질문에서 굵게 표시된 것처럼 처음부터 시작하는 위치 필드의 다른 모든 값을 추가하기 만하면 모든 값에 100을 더하는 것입니다. 주위에? –

+0

이상 하네. 나는 여기 코드를 테스트했다 : http://sandbox.onlinephpfunctions.com/code/33fb4e8da7bb0392193840eccb005b1b33d96c79 그리고 다른 모든 값에만 적용하고있다. 위치 필드에만 적용하려면 문자열을 나눠야하고 코드를 첫 번째 파트에 적용하고 파트를 다시 함께 결합하십시오. –

+0

아, 네 말이 맞아 내가 잘못된 값을보고 있었어! 고맙습니다. 1000+ 이상을 가지고 모든 문자열을 분리 할 수 ​​없기 때문에 문자열을 분할하는 것 이외의 다른 위치 필드로 만들 수있는 또 다른 방법이 있습니까? –

관련 문제