我在 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/