2

に問題があり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>
    }
}

secondClass.java

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

そのため、プロジェクト内の各Javaファイルの「UNDESIRABLECOMMENTS」の部分を削除したいのですが、手動ではなく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>
    }
}

「UNDESIRABLECOMMENTS」の最初から2番目の関数の説明の最後までの間にあったものはすべて削除されました。

したがって、問題は次のとおりです。replaceregexpがさらに* /を検出すると、最後の* /で停止し、「UNDESIRABLECOMMENTS」とこの最後の*/の間のすべてを削除します。

「望ましくないコメント」と最初に見つかった*/の間にあるものを削除するだけの解決策はありますか?

4

1 に答える 1

1

あなたの問題は、正規表現のその+数量詞が貪欲であり、一致している間に可能な限り多くの入力を消費することです。試す

UNDESIRABLE COMMENTS.+?\*/

代わりに-+?と同じ意味+ですが、が進まない、つまり、表現全体の全体的な一致を生成しながら、可能な限り一致しないようにします。

于 2012-11-12T13:39:42.230 に答える