2014-06-30 4 views
0

Ant 빌드 파일에서 replaceregexp를 사용하여 두 개의 태그를 찾아 교체하고 그 사이의 내용을 유지하는 방법이 있습니까? '정규식은 시작과 끝을 바꾸고 중간을 무시합니다.

<@>[email protected]@ 

<@>123456789. <@@> 

<@> yop <@@> 

<@><@@> 

내가 할 수있는 :

</a> and </p> 

각각, 내가 가진 너무

<@> and <@@> 

로 교체

</a>1234abcdefg</P> 

</a>123456789. </p> 

</a> yop </p> 

</a></p> 

및 예를 들어,이 모든 것을 찾을 수 있습니다 태그는 개별적으로 교체되므로 다른 곳에서 나는 단지 </a> 뒤에 </p>이 오는 인스턴스를 같은 줄에 아무 것도 또는 그 사이에 넣지 않고 인스턴스간에 원하는 것으로 유지하고 싶습니다.

답변

0

이 시도 :

<replaceregexp file="notTested.xml" match="(&lt;)\/a(&gt;.*?&lt;)\/p(&gt;)" replace="\[email protected]\[email protected]@\3" byline="true" flags="g" /> 

but it replaces what's between the tags with .*,에 관해서는, 나는 .*을 보지 못했다 대체/대체 표현식에서. 아마도 리터럴 인 .*으로 간주됩니다.

</a>1234abcdefg</P>abcde</a>123456789. </p>

<@>1234abcdefg</P>abcde</a>123456789. <@@>

로 대체 될 것이다 : &lt;/a&gt;.*&lt;/p&gt; 경우와

&gt; .* &lt;는 같은 같은 줄에 </a></p>의 여러 declerations합니다을 ...있을 때 작동하지 않습니다 non greedy 한정 기호 ?을 사용해야합니다. .*?.*의 사용에 대해서는 WiKi을 참조하십시오.

+1

당신의 "시험해보십시오"는 완벽하게 작동했습니다. 또한 그것이 왜 효과가 있었는지 도왔는데, 지금은 관련된 원리를 이해하고 있습니다. 대단히 감사합니다. – user3762977

0

해결 방법 1 : 당신은 당신은 괄호와 경기를 저장이

을 시도하고 교체 할 수 있습니다.

exp = new Regex (@ "YourtagStartRegex (bodyRegex) YourtagClosingRegex"); str = exp.Replace (str, "$ 1");

참조 : Replace the start and end of a string ignoring the middle with regex, how?

또는

해결 방법 2 :

Regex ignore middle part of capture

+0

나는 그 첫 번째 대답을 보았지만 제대로 작동하지는 못했다. 위의 예제를 사용하여 Ant 태스크에서 어쩌면 더 나은 모습을 보여줄 수 있습니까? 나는'exp'가 앤트 타겟이되는 곳과'bodyRegex'가 포함하는 것을 이해하지 못합니다. 감사. – user3762977

관련 문제