2012-04-30 2 views
1

this 스레드를 기반으로합니다. 내 NAnt 스크립트에서 내 프로젝트의 현재 버전을 바꾸려고했습니다.AFTER 그룹화 구문이 올바르게 설정되지 않았습니까?

여기 조각에게 내가이 파일을 호출 출력을 바탕으로 다음과 같은 매개 변수

<property name="SetVersionCpp.File" value="${baseline.dir}\VersionNo.h" /> 
<property name="LineBegining" value="#define FILEVER" /> 
<property name="ReplaceWith" value="${FileVersion}" /> 

#define FILEVER 0, 2, 0, 3 
#define PRODUCTVER 0, 2, 0, 3 
#define STRFILEVER  "00.02.00.03\0" 
#define STRPRODUCTVER "00.02.00.03\0" 

<target name="Replace"> 
    <loadfile file="${SetVersionCpp.File}" property="h.file.content" /> 
    <regex 
     input="${h.file.content}" 
     pattern="(?'BEFORE'[.\s]*)${LineBegining}\s*[\s\d,]*\r\n(?'AFTER'[.\s]*)" /> 
    <echo 
     file="${SetVersionCpp.File}" 
     message="${BEFORE}${LineBegining} ${ReplaceWith} 
     ${AFTER}" 
     append="false" 
     verbose="true" /> 
</target> 

교체 제의, 가변 후에는 포착되지 어떤 이유로 파일의 나머지 부분.

[#define FILEVER 0, 2, 0, 30 

] 

공백이 올바르게 내가 잘못 뭘하는지

모든 아이디어를 형식 있어요 그래서 내가 괄호에 넣어 * : 이것은 내가 무엇을 얻을?

+0

I 라인 엔딩이되고 있는지 당신의 조각에서 말할 수 없다 파일에서 사용되었지만 \ r \ n은 유닉스 라인 엔딩과 일치하지 않습니다. Windows 스타일의 텍스트 파일을 사용하고 있습니까? – Nick

+0

윈도우즈를 사용하고 있습니다. 나는 \ r \ n 대신 \ r과 \ n을 시도했지만 결과는 바뀌지 않았습니다. – petejamd

+0

'(? 'BEFORE'. *) $ {LineBegining} \ s * [\ s \ d] * \ r \ n (? 'AFTER'. *) ', 결과에 두 번째 줄이 포함되고 줄 끝이 일치하지 않음 – petejamd

답변

1

나는 optionsSingleline에 너무 . 줄 바꿈과 일치한다고하고 그룹에서 클래스를 제거하여 설정하여 고정했습니다

<regex 
    input="${h.file.content}" 
    options="Singleline" 
    pattern="(?'BEFORE'.*)${LineBegining}\s*[\s\d,]*\r\n(?'AFTER'.*)" />