【问题标题】:Ignoring comment preceded or succeed by code忽略代码前面或成功的注释
【发布时间】:2020-07-28 02:05:33
【问题描述】:

这是我用来查找多行 cmets 的模式

private static final Pattern MULTI_LINE = Pattern.compile("/\\*(.|[\\r\\n])*?\\*/");

但是我想忽略代码前面或后面的 cmets 像这样

1. /* Some comment */ String val = "foo";
2. String val1 = "foo1"; /* Some comment */

如何更改我的正则表达式以忽略此类情况? 我不想替换注释,但我想忽略代码中的注释行等情况,因为我正在尝试查找文件中的注释行数。

【问题讨论】:

    标签: java regex pattern-matching matcher


    【解决方案1】:

    结合使用 ^ 边界匹配器和 \s 来匹配行首和注释开始之间只有空格的行。然后使用 $ 对行尾的情况进行等效处理。

    https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

    【讨论】:

    • 嗨@AlexVoss 我这样修改了我的正则表达式 (^\\s)/*(.|[\\r\\n])*?*/$,这是你的意思吗?
    • 是的,除了 (a) 您需要像您最初发布的代码一样转义注释分隔符中的星号,以及 (b) 您可能希望在末尾允许空格。您可能想尝试regexr.com 上的表达式。开启多线模式。
    【解决方案2】:
    private static final Pattern MULTI_LINE_COMMENT = Pattern.compile("((?<=([\\r\\n]))([\\s]*)|^)(/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/)([\\s]*(\\n|\\z))");
    

    这样就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2013-03-11
      • 2015-04-14
      • 2016-05-22
      • 2016-01-13
      • 1970-01-01
      相关资源
      最近更新 更多