2013-04-02 3 views
0

먼저 http://regexpal.com/과 같은 온라인 도구에서 텍스트의 첫 번째 항목 만 바꾸고이 항목이 MSBUILD 작업에서 작동하는지 확인하려고합니다.RegEX - 첫 번째 텍스트 만 바꾸기

난과 같이 .NET에서 원하는 것을 할 수 있습니다 MSBUILD 작업이 작업을 얻을 언급 한 바와 같이

 StringBuilder sb = new StringBuilder(); 
     sb.Append("IF @@TRANCOUNT>0 BEGIN");    
     sb.Append("IF @@TRANCOUNT>0 BEGIN"); 
     sb.Append("IF @@TRANCOUNT>0 BEGIN"); 
     Regex MyRgx = new Regex("IF @@TRANCOUNT>0 BEGIN"); 

     string Myresult = MyRgx.Replace(sb.ToString(), "foo", 1); 

내 궁극적 인 목표입니다. 내가 온 가장 가까운 (인정 하듯이 종료되지 않은!)

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 

    <ItemGroup> 
    <SourceFile Include="source.txt" /> 
    <FileToUpdate Include="FileToUpdate.txt" />  
    </ItemGroup> 

    <Target Name="go"> 
    <!-- a) Delete our target file so we can run multiple times--> 
    <Delete Files="@(FileToUpdate)" /> 

    <!-- b) Copy the source to the version we will amend--> 
    <Copy SourceFiles= "@(SourceFile)" 
     DestinationFiles="@(FileToUpdate)" 
     ContinueOnError="false" /> 

    <!-- c) Finally.. amend the file--> 
    <FileUpdate 
     Files="@(FileToUpdate)" 
     Regex="IF @@TRANCOUNT>0 BEGIN(.+?)" 
     ReplacementText="...I have replaced the first match only..." 
     Condition=""/> 
    <!-- NB The above example replaces ALL except the last one (!)--> 

    </Target> 

</Project> 

감사

정규식에서

답변

3

(.+?)BEGIN 단어 뒤에 추가 텍스트가있을 것이라는 점을 의미하지만 외모 마지막 하나를 제외한 모든 대체하는 것입니다 테스트 파일과 마찬가지로 BEGINS으로 끝나기 때문에 일치하지 않습니다.

+ 대신 *을 사용해 보거나 파일 끝 부분에 가비지를 추가하십시오. 실제 필요에 따라 다릅니다.

은 초기 작업을 해결하기 - 예를 들어 만일 Singleline 모드, 사용 욕심이있는 일치 파일의 나머지 :

나는 대체 텍스트에 $ 2에 추가 할 때 작동하지 않은 말을하고 있었다
<FileUpdate 
    Files="@(FileToUpdate)" 
    Regex="(IF @@TRANCOUNT>0 BEGIN)(.*)" 
    ReplacementText="...I have replaced the first match only...$2" 
    Singleline="true" 
    Condition=""/> 
+0

, 그리고 헤이 프레스토! $ 2가 작동하게 만드는 것은 무엇입니까? –

+0

$ 1, $ 2 등은 정규식에서 찾은 캡처이므로 $ 2는'(. *)'- "IF @@ TRANCOUNT> 0 BEGIN' 이후" – Lanorkin

+0

감사합니다 :) [캡처에서 읽으 려합니다. ..] –

관련 문제