我无法找到使用ant删除空间的方法。 (我不是指修剪,而是从〜去除)
我想让一个项目与另一个项目有一点区别。
例如:
我有以下代码。
.... doSomeThing;
//#removeStart
NotReleasedObject nro = new NotReleasedObject();
nro.doSomeThing();
//removeEnd#
....doAnyThing..
您可以轻松查看,我想从//#removeStart
移至//removeEnd#
。我不确定将编写多少代码,但这两个代码中的所有代码都需要消失。并且在一个java文件中可以有多个//#removeStart ... //removeEnd#
。
以下是我的测试replaceregexp
代码:
<replaceregexp flags="s" replace="" byline="false" encoding="utf-8">
<regexp pattern="//#removeStart.*//removeEnd#"/>
<fileset dir="${extern-source-path}"/>
</replaceregexp>
------ source for victim.
//#removeStart
space 1
//removeEnd#
something
//#removeStart
space 2
//removeEnd#
现在我的代码工作不正常。标志-s有效,但如果一个文件有多个匹配,那么从空格1到空格2的所有内容都消失了。 (包括something
!)
我真正想要的是空间1,2消失了,但something
应保持不变。
如何修复它以便每次更换1次?
答案 0 :(得分:2)
您的明确字符不匹配:您的正则表达式代表//##ExternRemove
,而您的实际文字是//##removeStart
或//#removeStart
。如果这是一个真正的正则表达式,那么显式字符必须完全相同。此外.
与换行符不匹配,您需要明确包含该换行符(例如[\s\S]*
)。
最后,如果您可能有多对此匹配,则应该使匹配非贪婪(通常是添加?
)。总而言之,你可能想要一个正则表达式,如:
//##?removeStart[\s\S]*?//removeEnd##?
假设您希望允许1-2 #
开始一行,并且该短语将始终为removeStart
/ removeEnd
。否则你可以添加选项,例如
//##?(?:removeStart|ExternRemove)[\s\S]*?//(?:removeEnd|ExternEnd)##?
再次,这取决于非捕获匹配的蚂蚁术语。
答案 1 :(得分:0)
我成功地做到了这一点:
This is a test
--->
###start remove
Blah blah blah
Yadda yadda yadda
###end remove
--->
End of my test
<project>
<replaceregexp file="foo.txt"
flags="s"
match="###start remove.+###end remove"
replace=""/>
</project>
This is a test
--->
--->
End of my test
您的正则表达式看起来不太对劲。您正则表达式正在说##ExternRemove.*
,但您的文件却改为//#removeStart
。
我看到我是否可以在副本或concat中执行此操作,因为我讨厌直接更改文件。不幸的是,我还没有找到办法做到这一点。