2017-12-13 7 views
0

안녕하세요, pom.xml의 버전을 (-SNAPSHOT)으로 바꾸고 싶습니다. 버전이 1.1.1 인 경우 1.1.1 SNAPSHOT을 원하고 이미 SNAPSHOT 인 경우 동일한 것으로 유지하십시오. Ant Regex Replacement issue

현재 나는이

<propertyregex property="snapshotVersionRepl" 
           input="${pom.project.version}" 
           regexp="(.*)(-SNAPSHOT)?" 
           replace="\1-SNAPSHOT" 
           casesensitive="false" /> 

을 가지고 있지만 입력 1.0.0와 나는 1.0.0-SNAPSHOT 스냅 샷을 얻고, 1.0.0-SNAPSHOT으로 나는 1.0.0-SNAPSHOT - 스냅 샷 스냅 샷을 얻을.

답변

1

당신은 앵커를 추가하고 첫 .* 게으른하여 패턴을 해결할 수 있습니다 다음 regex demo

세부

  • ^ 참조

    regexp="^(.*?)(-SNAPSHOT)?$" 
    

    을 - 문자열의 시작

  • (.*?) - 그룹 1 : 가능
  • (-SNAPSHOT)? 한 적은 수의 줄 바꿈 문자 이외의 0+ 문자, - 옵션 -SNAPSHOT 순서
  • $
  • - 문자열의 끝.
0

먼저 Ant 스크립트에서 나쁜 습관을 조장하는 경향이 있으므로 먼저 ant-contrib를 피하는 것이 좋습니다. 어떤 종류의 문자열 조작은 Ant의 filterchain 유형을 통해 수행 할 수 있습니다.

정규식에 관해서는 Wiktor의 패턴이 작동하지만,이 경우 부정적인 lookbehind를 선호합니다.

시험 대상 :

<target name="replace-version"> 
    <property name="pom.project.version1" value="1.1.1" /> 

    <loadresource property="snapshotVersionRepl1"> 
     <propertyresource name="pom.project.version1" /> 
     <filterchain> 
      <tokenfilter> 
       <replaceregex pattern="(.*)(?&lt;!-SNAPSHOT)$" replace="\1-SNAPSHOT" /> 
      </tokenfilter> 
     </filterchain> 
    </loadresource> 

    <echo>${snapshotVersionRepl1}</echo> 

    <property name="pom.project.version2" value="1.1.1-SNAPSHOT" /> 

    <loadresource property="snapshotVersionRepl2"> 
     <propertyresource name="pom.project.version2" /> 
     <filterchain> 
      <tokenfilter> 
       <replaceregex pattern="(.*)(?&lt;!-SNAPSHOT)$" replace="\1-SNAPSHOT" /> 
      </tokenfilter> 
     </filterchain> 
    </loadresource> 

    <echo>${snapshotVersionRepl2}</echo> 
</target> 

출력 : &lt;가 XML 구문을 파손되지 않도록 < 대신 사용되는

[echo] 1.1.1-SNAPSHOT 
[echo] 1.1.1-SNAPSHOT 

하는 것으로.