【问题标题】:Groovy remove multiline commentGroovy 删除多行注释
【发布时间】:2012-06-12 20:50:45
【问题描述】:

如何使用 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) 和 ${}。但是,我不确定如何有效地将它混合到正则表达式中。欢迎任何帮助。谢谢。

【问题讨论】:

    标签: regex groovy comments multiline replaceall


    【解决方案1】:

    做类似的事情

    /\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
    

    为正则表达式工作?

    (来自http://ostermiller.org/findcomment.html

    【讨论】:

    • 这是nedit版本;您不需要 Java/Groovy 中的 |[\r\n] 部分。事实上,否定字符类匹配换行符的情况很少。这篇文章在这一点上有些误导。
    • 不,我刚才试过了,解释器在第一个反斜杠(第二个字符)上报错:fileString = fileString.replaceAll('/*([^*]|[\r\ n]|(*+([^*/]|[\r\n])))**+/','')
    • @tfmontague,您需要像在问题中那样转义一些反斜杠。具体来说,\* 应该是 \\*
    【解决方案2】:

    试试这个表达式:

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

    (?m) 不会使 . 匹配新行,(?s) 会这样做。

    【讨论】:

    • 它会删除内容,但会留下一个空行。我想从文件中完全删除多行注释。谢谢。
    • 所以只需在表达式中添加一个换行符:'(?s)/\\*.*?\\*/\n'
    猜你喜欢
    • 2012-10-15
    • 2016-05-21
    • 1970-01-01
    • 2023-01-16
    • 2017-12-03
    • 2011-01-28
    • 2023-03-03
    • 2011-07-22
    相关资源
    最近更新 更多