2014-06-30 111 views
0

在Ant構建文件中,有沒有一種方法可以使用replaceregexp來查找和替換兩個標記,並保留它們之間的內容?例如,要找到所有這些:正則表達式替換開始和結束,忽略中間

</a>1234abcdefg</P> 

</a>123456789. </p> 

</a> yop </p> 

</a></p> 

並更換

</a> and </p> 

<@> and <@@> 

讓我有,分別爲:

<@>[email protected]@ 

<@>123456789. <@@> 

<@> yop <@@> 

<@><@@> 

我可以」不要單獨替換標籤,因爲它們會發生在其他地方,我只想要</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 ...如工作你需要使用非貪心量詞?。有關使用.*?.*,請參閱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'是一個Ant目標,還是'bodyRegex'包含的內容。謝謝。 – user3762977

相關問題