我有正则表达式,应该删除评论(你们这很糟糕,但对我来说它有效)
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*/
答案 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修饰符,以便在行的开头匹配。