2014-03-07 1 views
1

정규식을 사용하여 과 같은 문자열에서1.2.3과 같이 추출하려고 시도하고 있습니다.MSBuild System.Text.RegularExpressions.Regex가 일치하지 않습니다.

나는 \d$을 사용하면 충분하다고 생각하지만 정규 표현식을 사용하는 경우 다음과 같은 MSBuild를 파일에 작동하지 않습니다

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <AssemblyVersion>1.5.0</AssemblyVersion> 
    </PropertyGroup> 
    <Target Name="TestXmlPeek"> 
     <XmlPeek 
      Namespaces="&lt;Namespace Prefix='msb' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;" 
      XmlInputPath="$(MSBuildProjectFile)" 
      Query="/msb:Project/msb:PropertyGroup/msb:AssemblyVersion/text()"> 
      <Output TaskParameter="Result" ItemName="Peeked" /> 
     </XmlPeek> 

     <Message Text="@(Peeked)"/> 

     <PropertyGroup> 
      <Out>$([System.Text.RegularExpressions.Regex]::Match(@(Peeked), `\d$`))</Out> 
     </PropertyGroup> 

     <Message Text="Input: [@(Peeked)] Output: [$(Out)]"/> 
    </Target> 
</Project> 

나는 다음과 같은 출력을 참조 TestXmlPeek 목표 실행하면 :

TestXmlPeek: 
    1.5.0 
    Input: [1.5.0] Output: [] 

누군가 내가 여기서 잘못하고있는 것을 말해 줄 수 있습니까?

(BTW : 나는 결국 내 버전 번호를 증가하기 위해 MSBuild에서 대상을 사용하고 싶습니다으로 나는이 일을하고 있습니다.)

편집

내가 MSBuild를 정규식이 작동하는지 확신 마치 다음과 같은 단순한 표현식을 사용하는 것처럼 전체 문자열과 일치하고 1.5.0을 출력하는 것을 볼 수 있습니다.

<Out>$([System.Text.RegularExpressions.Regex]::Match(@(Peeked), `.*`))</Out> 
+0

'\'\ d $ \''를''\ d $ "'로 바꾸어 보았습니까? –

+0

나는'with '를 바꾸려고 시도했지만 아무런 차이가 없다. – vegemite4me

답변

0

는 사용 \\ D $ 오히려 개발을 $ \보다 - 당신은 정규 표현식에서 문자 \를 원하고, C#을 문자열에 해당 얻을 \\ 사용해야합니다.

+0

그래서 답을 표시 할 때 SO가 몇 개 제거했을 수도 있으므로 사용하고자하는 것이 얼마나 많은지 잘 모르겠다. '\ d $','\\ d $','\\\ d $','\\\\ d $'등의 조합을 사용하면됩니다. – vegemite4me

0

하면, 문자열의 끝에서 줄 바꿈을 가지고 함께 시도가 될 수 있습니다 : 그룹 1,

\.(\d+)[\r\n]*$ 

이 캡처 것이라고는 점 후 최종 줄 바꿈하기 전에 자리를 지속됩니다.

+0

감사합니다. 출력은'[1.5.0]'이 출력되기 때문에 줄 바꿈이 없다고 생각합니다. 그래서 줄 바꿈이 없다고 생각합니다. 문제는 실제 정규 표현식에있는 것이 아니라 어떻게 해석할까요? 엔진? – vegemite4me

관련 문제