2012-06-08 212 views
2

如何使用groovy删除多行注释?Groovy删除多行注释

/* Use groovy replaceAll regex to 
    remove this comment */ 

我将上述文本从文件读入文件对象,然后将其转换为字符串。而如果注释跨越单行线,我可以使用的replaceAll方法删除它张贴如下:

def file = new File('myfile') 
def fileString = file.getText() 

println fileString.replaceAll('/\\* .* \\*/','') 

我曾尝试使用该标志,但我不能让它认我的(M?)模式。我已经尝试了以下陈述,并且它们都不符合我的模式。

fileString.replaceAll('(?m)/\\* (.*) \\*/' ,'') #multiline switch 
fileString.replaceAll('(/\\*)(.|\n\r)*(\\*/)' ,'') #match all .* (include \n\r) 

我想过使用DotAll,最后的(\ s)和$ {}。但是,我不确定如何将它有效地混合到正则表达式中。任何帮助将受到欢迎。谢谢。

回答

7

试试这个表达式:

'(?s)/\\*.*?\\*/' 

(?m)不作.匹配新的生产线,(?s)做到这一点。

+0

它会删除内容,但会留下空行。我想完全删除文件中的多行注释。谢谢。 – tfmontague

+0

所以只需在表达式中添加换行符:''(?s)/ \\ *。*?\\ */\ n'' – rdmueller

0

是否像

的正则表达式部分工作?

(从http://ostermiller.org/findcomment.html

+0

这是* nedit *版本;您不需要Java/Groovy中的'| [\ r \ n]'部件。实际上,否定字符类*不匹配换行符的风格很少。这篇文章在这方面有些误导。 –

+0

不,我刚刚尝试过,解释器报告第一个反斜杠(第二个字符)有错误: fileString = fileString.replaceAll('/ \ *([^ *] | [\ r \ n] |( \ * +([^ * /] | [\ r \ n])))* \ * + /','') – tfmontague

+0

@tfmontague,你需要像你在问题中那样去掉一些反斜杠。具体来说,'\ *'应该是'\\ *'。 –