我找不到使用 ant 删除空格的方法。 (我不是指修剪,而是从 ~ 删除到 )
我想让一个项目与另一个项目有所不同。
例如:
我有以下代码。
.... doSomeThing;
//#removeStart
NotReleasedObject nro = new NotReleasedObject();
nro.doSomeThing();
//removeEnd#
....doAnyThing..
正如您所看到的,我想从 //#removeStart
删除到 //removeEnd#
。我不确定会写多少代码,但这2个标签内的所有代码都需要消失。并且一个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 个匹配项,那么从空格 1 到空格 2 的所有内容都会消失。 (包括一些东西
!)
我真正想要的是空间 1,2 消失,但是某些东西
应该保持原样。
如何修复它,以便将每个出现的情况 1 替换为 1?
最佳答案
您的显式字符不匹配:您的正则表达式显示 //##ExternRemove
而您的实际文本是 //##removeStart
或 //#removeStart
。如果这是一个实际的正则表达式,则显式字符需要完全相同。此外 .
与换行符不匹配,您需要专门包含它(例如 [\s\S]*
)。
最后,如果您可能有多个匹配对,则应该使匹配成为非贪婪的(通常是通过添加 ?
来实现)。总而言之,您可能需要一个正则表达式,例如:
//##?removeStart[\s\S]*?//removeEnd##?
假设您希望允许 1-2 #
开始一行,并且短语始终为 removeStart
/removeEnd
。否则你可以添加选项,例如
//##?(?:removeStart|ExternRemove)[\s\S]*?//(?:removeEnd|ExternEnd)##?
同样,这取决于非捕获匹配的 ant 术语。
关于regex - ant 的 Replaceregexp ,删除特定空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084386/