RegExp删除注释

RegExp删除注释,regex,groovy,Regex,Groovy,问题是-我需要从一个文件(java代码)中删除所有注释,所以像//this或 /* Multiline */ 应删除评论。我正试图通过这样做来实现这一点 text = text.replaceAll($/(//.*\n)|(/\*[.\n]*\*/)/$, "") 但仅从字符串中删除一行注释。 显示我需要的所有匹配项,你能指出一个问题吗 您可以使用以下正则表达式 (\/\*.*(\n.*\n)*\*\/)|(\s*\/\/.*\n) 您必须打开DOTALL模式,以便在Java/Gro

问题是-我需要从一个文件(java代码)中删除所有注释,所以像
//this

/*  Multiline  */ 
应删除评论。我正试图通过这样做来实现这一点

text = text.replaceAll($/(//.*\n)|(/\*[.\n]*\*/)/$, "")
但仅从字符串中删除一行注释。
显示我需要的所有匹配项,你能指出一个问题吗

您可以使用以下正则表达式

(\/\*.*(\n.*\n)*\*\/)|(\s*\/\/.*\n)

您必须打开
DOTALL
模式,以便在Java/Groovy正则表达式中将
\n
匹配。它可以通过在模式中嵌入
(?s)
来打开。下面是一个工作示例:

def pattern = $/(//.*)|(?s)/\*.*\*//$
def singleLine = '''
    code // single line comment
    code
'''
def multiLine = '''
    code /* multi line
    comment */ code
'''
assert singleLine.replaceAll(pattern, '') == '\n    code \n    code\n'
assert multiLine.replaceAll(pattern, '') == '\n    code  code\n'

如果逐行执行此操作,您将如何处理多行注释(例如docblocks)?我有一个大字符串,表示文件中的整个文本。以上代码或多或少对我有用(注释//上的\n是贪婪的)。实际问题是什么?请提供一个错误案例如何:
s=“/*”;a++;t=“*/”?只要简单地替换
/*
*/
之间的所有内容,您就可以使用
s=“”@cfrick错误案例是,所有的块注释都被忽略,而不是被替换。啊,我的也在那里工作。这并没有给出任何结果——甚至有单行注释。正如巴特在问题的评论中所说的那样,有些极端情况使得使用regexp进行工作变得困难<代码>断言“def url=”http://example.com“.replaceAll($/(/.*)|(?s)/\*.\*/$,”)=='def url=“http:”