2012-11-12 67 views
1

我有一些問題replaceregexp。爲了更容易理解,我將使用簡單的例子,而不是真正的代碼。replaceregexp with Ant Script

所以假設我有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文件在我的項目中,但我想用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」和最後一個* /之間的所有內容。

您是否有任何解決方案來刪除「UNDESIRABLE COMMENTS」和第一個*/found之間的內容?

回答

0

你的問題是,+量詞正則表達式是greedy,並且會消耗作爲輸入儘可能多仍然匹配。嘗試

UNDESIRABLE COMMENTS.+?\*/ 

代替 - +?裝置一樣+但是reluctant即它將匹配作爲儘可能同時仍然產生整個表達式的整體匹配。

+0

非常感謝你,它的工作原理! –