我有这个regex来删除.c文件中的注释(崇高3 regex)
(^\/\/.*)|(\s+\/\/.*)|((\/\*)(.|\n)+?(\*\/)) 我可以在java中使用这个regex以编程方式使用它吗?如果没有,我应该使用什么正则表达式?(我知道,问我们愚蠢一点,但我一点也不知道该怎么做。)
发布于 2016-05-30 08:58:33
请注意,模式中有太多冗余捕获组,(.|\n)+?构造效率很低,可能会在Java中引起严重问题(与任何其他regex引擎一样)。
您可以使用更多的流线表达式,这些表达式不应导致过多的冗余回溯:
(?:^|\s+)//.*|/\*[^*]*\*+(?:[^/*][^*]*\*+)*/见regex演示。与Pattern.MULTILINE标志一起使用它(或者在模式的开头添加(?m) )。
模式解释
(?:^|\s+)//.* -(您的2个(^\/\/.*)|(\s+\/\/.*)分支合并了)字符串开头的单行注释或第一个1+空白空间之后的//子字符串(包括这些空格和正斜杠)| -或/\*[^*]*\*+(?:[^/*][^*]*\*+)*/ -匹配多行/**/注释Java声明:
String pattern = "(?m)(?:^|\\s+)//.*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/";和一个样本代码
String s = "// Comment\ntex test\nMore text here // and comment 2\n/* More comments\nhere and\nhere */";
String pattern = "(?m)(?:^|\\s+)//.*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/";
System.out.println(s.replaceAll(pattern, "")); 发布于 2016-05-30 09:06:31
这应该有效:(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)
Ideone演示
https://stackoverflow.com/questions/37521346
复制相似问题