2012-11-12 8 views
1

J'ai quelques problèmes avec replaceregexp. Pour être plus compréhensible, je vais utiliser des exemples simples, et pas le vrai code.replaceregexp avec Ant Script

présument J'ai 2 fichiers 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> 
    } 
} 

Je veux supprimer la partie "COMMENTAIRES Indésirables" de chaque fichier java dans mon projet, mais je veux le faire avec ANT, pas manuellement. Pour cela, j'utilise ceci:

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

Ce que je veux est d'obtenir ce code:

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

Il fonctionne très bien pour secondClass.java mais pas pour le premier fichier. Le problème apparaît lorsqu'il y a d'autres commentaires, comme la description des fonctions. Les résultats du fichier bien mais firstClass.java je reçois ceci:

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

Tout ce qui était entre le début des « COMMENTAIRES Indésirables » à la fin de la description de ma deuxième fonction a été supprimée. Donc le problème est: quand mon remplaceregexp trouve plus * /, il s'arrête sur le dernier, et supprime tout entre "UNDESIRABLE COMMENTS" et ce dernier * /.

Avez-vous une solution pour supprimer simplement ce qui est entre "UNDESIRABLE COMMENTAIRES" et le premier */trouvé?

Répondre

0

Votre problème est que ce + quantificateurs dans les expressions régulières est greedy, et consommera beaucoup de l'entrée possible tout en faisant correspondre encore. Essayez plutôt

UNDESIRABLE COMMENTS.+?\*/ 

- +? signifie la même chose que + mais est reluctant à-dire qu'elle correspondra comme peu que possible tout en produisant une correspondance globale de l'expression entière.

+0

Merci beaucoup, ça marche !! –

Questions connexes