Java 正则表达式:如何删除包含在特定分隔符中的子字符串

Java RegEx: How to remove substrings encased in specific delimiters

我正在编写一个词法分析器,我想在其中删除评论,例如:

/* this is a block comment that can
   span across multiple lines */
// this a line comment that can only span one line

我已经尝试使用 /\*.*\*/ 匹配块注释。问题在于 RegEx 的第一场比赛似乎总是最长的。如果我在同一代码中有多个块注释,它将匹配从第一个块注释开始到最后一个块注释结束的子字符串。这是我想解决的问题。我假设我可以(在 .* 之后)添加一些内容来检查评论本身是否没有 */。但是,我不知道如何告诉 RegEx (Java) 不匹配子字符串中的特定单词。

如何编辑 /\*.*\*/ 以停止 String.replaceAll() 匹配多个评论? (我可以对 //\n 的行注释使用相同的解决方案)

您想匹配非贪心? 标志是这样做的:

/\*.*?\*/

* 之后的 ? 告诉搜索找到最小数量的字符以使模式匹配文本。