您需要在正则表达式(?s)
的开头使用partialFiltered
以允许跨多行的注释(例如,请参阅Pattern.DOTALL 和 String.replaceAll)。
但是.*
中间/\\*.*\\*/
使用了一个贪婪的匹配,所以我希望它可以替换两个单独的注释块之间的全部内容。例如,给定以下内容:
/* Comment #1 */
for (i = 0; i < 10; i++)
{
i++
}
/* Comment #2 */
没有对此进行测试,所以我冒着鸡蛋的风险,但希望它会删除包括中间代码在内的全部内容,而不仅仅是两个评论。一种防止方法是使用.*?
使内部匹配非贪婪,即尽可能少地匹配:
String partialFiltered = code.replaceAll("(?s)/\\*.*?\\*/", "");
由于fullFiltered
正则表达式不以 开头(?s)
,因此它应该在没有的情况下工作(?=\\n)
(因为replaceAll
正则表达式默认情况下不跨越多行) - 所以您应该能够将其更改为:
String fullFiltered = partialFiltered.replaceAll("//.*", "");
查找表示注释的字符也可能存在问题,例如,如果它们出现在字符串或正则表达式模式中,但我假设这些对您的应用程序并不重要——如果它们是,这可能是道路的尽头使用简单的正则表达式,您可能需要一个解析器...