删除除了匹配正则表达式java

时间:2016-06-21 13:18:58

标签: java regex string

我有正则表达式,应该删除评论(你们这很糟糕,但对我来说它有效)

String regex = (^\/\/.*)|(\s+\/\/.*)|((\/\*)(.|\n)+?(\*\/));

此代码应删除所有密码

Pattern.compile(regex).matcher(some text).replaceAll(" ");

但是如何才能删除所有EXCEPT regexp?

例如: 如果我有这样的字符串:

/*Comments it's cool*/ public static void foo(){}

我的正则表达式匹配评论,但我需要删除不匹配的内容,所以它看起来像:

/*Comments it's cool*/

1 个答案:

答案 0 :(得分:0)

基本上,您可以匹配正则表达式匹配的内容,并连接匹配的文本。这更容易。

至于除了原始模式匹配的所有删除的正则表达式,您可以考虑使用捕获可选组捕获整个模式,并使用.匹配任何字符后它

说,你的模式是abc。它匹配abc。但现在,你需要匹配相反的,你的正则表达式不匹配的一切。使用

(?s)(abc)?.

并替换为$1。请参阅regex demo

对于换行,可能需要进行一些调整。如果您不想删除换行符,请不要使用DOTALL修饰符。如果要使用它,请将.替换为原始模式中的[^\n\r]。请记住,您可以使用某种(\r?\n|\r){2,}模式(以及$1反向引用)缩小空行。

所以,你的正则表达式是

String regex = "^\\s*//.*|/\*[^*]*\*+(?:[^/*][^*]*\*+)*/";

其中/\*[^*]*\*+(?:[^/*][^*]*\*+)*/匹配多行注释,^\\s*//.*匹配单行注释。

要删除除匹配之外的所有内容,请使用

String regex = "(?sm)(^\\s*//[^\r\n]*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/)?.";

并替换为$1反向引用。请参阅regex demo(基于ClasG demo)。注意我还为(?m)添加了^ MULTILINE修饰符,以便在行的开头匹配。