我正在编写一个词法分析器,我想在其中删除注释,例如:
/* this is a block comment that can
span across multiple lines */
// this a line comment that can only span one line
我已经尝试过 /\*.*\*/
与 block 注释匹配。问题是 RegEx 的第一个匹配似乎总是最长的。如果我在同一代码中有多个 block 注释,它将匹配从第一个 block 注释的开头到最后一个 block 注释的结尾的子字符串。这是我想解决的一个问题。我假设我可以(在 .*
之后)添加一些内容来检查是否存在 */
在评论本身。但是,我不知道如何告诉 RegEx (Java) 不匹配子字符串中的特定单词。
如何编辑/\*.*\*/
停止 String.replaceAll() 跨多个注释匹配?
(我可以对 //
和 \n
的行注释使用相同的解决方案)
最佳答案
您想让匹配非贪婪。 ?
符号的作用是:
/\*.*?\*/
*
之后的 ?
告诉搜索查找使模式与文本匹配的最小字符数。
关于Java 正则表达式 : How to remove substrings encased in specific delimiters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026940/