java - 用 Ant 脚本替换正则表达式

标签 java ant

我在 replaceregexp 方面遇到一些问题。为了更容易理解,我将使用简单的示例,而不是真正的代码。

所以假设我有 2 个 java 文件:

firstClass.java

/**
 * UNDESIRABLE COMMENTS ABCDEFGHIJ ABCDEFGHIJ ABCDEFGHIJ ABCDEFGHIJ ABCDEFGHIJ
 * ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ
 */
public class firstClass{
    public String firstFunction(){
         <instructions>
    }

    /**
    * My function's description that I want to keep
    */
    public String secondFunction(){
         <instructions>
    }
}

第二类.java

/**
 * UNDESIRABLE COMMENTS ABCDEFGHIJ ABCDEFGHIJ ABCDEFGHIJ ABCDEFGHIJ ABCDEFGHIJ
 * ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ
 */
public class secondClass{
    public String firstFunction(){
         <instructions>
    }
}

所以我想删除项目中每个java文件的“UNDESIRABLE COMMENTS”部分,但我想用ANT来完成,而不是手动。为此,我正在使用这个:

<replaceregexp flags="s">
    <regexp pattern="UNDESIRABLE COMMENTS.+\*/"/>
    <substitution expression="*/"/>
    <fileset dir=".">
        <filename name="*.java"/>
    </fileset>
 </replaceregexp>

我想要的是得到这个代码:

firstClass.java

/**
 */
public class firstClass{
    public String firstFunction(){
         <instructions>
    }

    /**
    * My function's description that I want to keep
    */
    public String secondFunction(){
         <instructions>
    }
}

第二类.java

/**
 */
public class secondClass{
    public String firstFunction(){
         <instructions>
    }
}

它对于 secondaryClass.java 非常有效,但对于第一个文件则不然。当有其他注释(例如函数的描述)时,就会出现问题。文件 secondary.java 结果很好,但在firstClass.java 中我得到了这个:

/**
    */
    public String secondFunction(){
         <instructions>
    }
}

从“不受欢迎的评论”开始到第二个函数描述结束之间的所有内容都被删除。

所以问题是:当我的replaceregexp找到更多*/时,它会停在最后一个,并删除“UNDESIRABLE COMMENTS”和最后一个*/之间的所有内容。

您有什么解决方案可以删除“UNDESIRABLE COMMENTS”和找到的第一个 */之间的内容吗?

最佳答案

您的问题是正则表达式中的 + 量词是 greedy ,并且将在仍然匹配的情况下消耗尽可能多的输入。尝试一下

UNDESIRABLE COMMENTS.+?\*/

相反 - +?+ 含义相同,但为 reluctant即,它将尽可能匹配,同时仍然产生整个表达式的整体匹配。

关于java - 用 Ant 脚本替换正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344655/

相关文章:

java - 为json数据编写junit测试用例

java - 为什么 lambda 强制我使用单个元素数组而不是最终对象?

java - 在 javadoc 中添加链接到谷歌代码上的源文件

java - 为什么使用 Gradle 而不是 Ant 或 Maven?

java - 无法解析类型。它间接引用所需的 .class 文件

java - 安装 Android SDK Build-Tools 26 后无法启动 Activity ComponentInfo{...}

java - 如何从 String 加载 RSA 公钥以在 Java 中进行签名验证?

java - 运行时出现 ClassNotFoundException

java - 如何使用命令 "[javac] error: invalid target release: 12.0.1"解决 "ant run"

ant - 如何使用 ANT 在远程计算机中运行批处理文件?