You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

词法分析器:含引号内*/的/* */型注释识别求助

注释识别正则解决方案

你的问题是要匹配/*和*/之间的注释,仅当*/不在双引号内时才作为注释结束标记,以下是具体解决办法:

你现有方案的问题

  • 第一个正则/\*.*?\*/用了非贪婪匹配,但无法区分引号内的*/,会错误把引号外的第一个*/当作结束,比如/* "*/" test */会被截断成/* "*/。
  • 第二个正则语法混乱,存在多余空格和错误转义,根本无法正常工作。

正确的正则表达式

Pattern commentPattern = Pattern.compile("/\\*(([^\"*/]|\"(\\\\.|[^\"])*\"|\\*[^/]|/[^*]))*\\*/");

正则逻辑拆解

  • /\*:匹配注释的起始标记/*
  • 核心匹配部分(([^"*/]|"(\\.|[^"])*"|\*[^/]|/[^*]))*循环处理四种情况:
    • [^"*/]:匹配除双引号、*、/之外的任意字符(包括空格、换行)
    • "(\.|[^"])*":匹配双引号包裹的内容,其中\\.处理转义字符(比如\"),[^"]匹配非引号的普通字符,确保引号内的*/不会被当作结束标记
    • \*[^/]:匹配单独的*(后面没有紧跟/),避免误判为结束标记
    • /[^*]:匹配单独的/(后面没有紧跟*),避免误判为注释起始标记
  • \*/:匹配注释的结束标记*/

补充说明

  • 如果你的场景不需要处理转义引号(比如注释内不会出现\"),可以把正则里的"(\\.|[^"])*"简化为"[^"]*"
  • 如果需要支持多行注释,Java中默认.不匹配换行,但上面的正则用排除法已经包含换行,无需额外设置DOTALL标志。

内容的提问来源于stack exchange,提问作者Anastasia Frontend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:34:53