如何使用RegEx从文件中获取文档注释?

问题描述 投票:1回答:1

假设我有一个巨大的文件。这个巨大的文件包含一堆代码。在此代码中,每个函数都以XML格式记录。每个文档都包含在“文档注释”(/ **和** /)中。我想要一个正则表达式,它将删除不在文档注释之间的所有代码(这也包括文档注释,但如果需要我可以删除它们)。

部分脚本示例:

/**--------------------------------------------------------------------------**\
<summary>FunctionName</summary>
<returns>
    Returns 1 on success.
    Returns 0 on failure.
</returns>
<remarks>
    This function is a function.
</remarks>
\**--------------------------------------------------------------------------**/

int FunctionName()
{
    int X = 1;
    if(X == 1)
        return 1;
    return 0;
}

预期产量:

<summary>FunctionName</summary>
<returns>
    Returns 1 on success.
    Returns 0 on failure.
</returns>
<remarks>
    This function is a function.
</remarks>
regex documentation code-documentation
1个回答
1
投票

您可以使用此模式:

/^\/(\*\*-+\*\*)\\$(.*?)^\\\1\/$|./gsm

并用$2取代。

工作示例:https://regex101.com/r/fA8bP0/1

诀窍与Regex Pattern to Match, Excluding when… / Except between基本相同 - 使用交替来匹配我们需要的东西,并跳过我们不想要的一切。

关于模式的一些注意事项:

  • ^$不是严格需要的 - 这取决于评论是否在一条线上。您可以删除它们,并删除/m(多行)标志。
  • \/(\*\*-+\*\*)\\匹配整条评论,/**-------**\
  • 我们假设这些在块的开头与结尾处的连字符数相同,并将其捕获到\1。如果这不正确,请再次使用\*\*-+\*\*而不是\1。如果你有一个固定数量的连字符,你可以使用-{74}
  • 有趣的内容被捕获到$1
  • 其他所有东西都与.相匹配,并被替换掉了。
  • 警告:这种模式可能会以通常的方式失败 - 包含"/**-"的字符串,注释代码看起来像文档,转义字符等。
© www.soinside.com 2019 - 2024. All rights reserved.