2013-12-13 69 views
1

我想删除字符串中的简单//注释。 我的字符串被称为输入删除字符串中的注释?

def input = '''test //kommentar 
       | 
       |//noch einer 
       | 
       |und  noch //einer'''.stripMargin() 

的正则表达式是\s*\/\/.*$可以在这里http://regexr.com?37ks0

来测试我的代码,我有input = input.replaceAll(/\s*\/\/.*$/ , '')

但它不工作。有谁能够帮助我 ?

回答

2

最起码,你需要确保$锚允许各行的末尾匹配,而不是整个字符串的结尾:

input = input.replaceAll(/(?m)\s*\/\/.*$/ , '') 

但如果//发生,说,在一个引用的字符串?或者在其他情况下,他们不是指“开始评论”?

+1

答案是'(?m)'。你的例子不会像它那样工作,因为它不适用于''',你需要:''(?m)\\ s * //。* $''或'/(?m)\ s * \/\ /.*$/'作为你的模式 –

+0

@tim_yates:我认为这是关于Groovy的吗?它是否使用与Java不同的正则表达式? –

+0

它是,它确实如此。除了双引号以外,看看它会使Groovy尝试并扩展未转义的'$'。不确定PHP进入它的哪个位置? –

1

好吧,我从大学得到了答案。

如果是一行,说明中的代码有效。 因为我多线,我必须使用以下命令:

input = input.replaceAll(Pattern.compile(/\s*\/\/.*$/, Pattern.MULTILINE), '')

+0

或者使用'(?m)'如您从Tim获得的答案中所示 –

2

如果你想保持//noch einer线在你的输出一个空白行,你可以尝试:

input.replaceAll('(?m)//.*$' , '') 

当然,如果上面的行在你的输入文本中,那么所有这种正则表达式扫描会破坏输入代码,因为该行会变成input.replaceAll('(?m)

作为一般规则,代码的正则表达式解析从来不是一个好主意