用Ant脚本替换rengexp

时间:2012-11-12 13:33:07

标签: java ant

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

所以假设我有两个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>
    }
}

secondClass.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>
    }
}

secondClass.java

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

它适用于secondClass.java但不适用于第一个文件。当存在其他注释时会出现问题,例如函数的描述。文件secondClass.java结果很好,但是在firstClass.java中我得到了这个:

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

删除了“不可思议的评论”开头到我的第二个函数说明结尾之间的所有内容。

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

您是否有任何解决方案可以删除“难以置信的评论”和第一个* /找到的内容?

1 个答案:

答案 0 :(得分:0)

您的问题是正则表达式中的+量词是greedy,并且在匹配时尽可能消耗输入的 。尝试

UNDESIRABLE COMMENTS.+?\*/

代替 - +?表示与+相同但是reluctant,即它将匹配为 little ,同时仍然产生整体的整体匹配表达