regex - ant 的 Replaceregexp ,删除特定空格

标签 regex ant

我找不到使用 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/

相关文章:

java - 关于ant : how i can give few aruments to main function?

java - 使用 SonarQube Ant 任务进行分析

定义多个正则表达式以在多次迭代中使用的 Pythonic 和高效方法

java - 代理模式的正则表达式

.net - 为什么 regex.IsMatch(str) 比 str.EndsWith(不变文化)快?

python - Python 中正则表达式之后/之前的所有内容

web-applications - 如何让 Ant 在 'waitfor' 任务中加载和检查 URL 资源?

java - Ant Ivy : heap out of memory: GC overhead limit exceeded

java - 您如何在 Maven pom.xml(来自 Ant)中设置 java.security.policy?

regex - 匹配-100到0的正则表达式