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

如何使用RegEx从文件中获取文档注释?,regex,documentation,code-documentation,Regex,Documentation,Code Documentation,假设我有一个大文件。这个巨大的文件包含一堆代码。在这段代码中,每个函数都是以XML格式记录的。每份文件均附在“文件注释”中(/**和**/)。我想要一个正则表达式,它将删除不在文档注释之间的所有代码(也将包括文档注释,但如果需要,我可以在以后删除它们) 部分脚本的示例: /**--------------------------------------------------------------------------**\ <summary>FunctionName</s

假设我有一个大文件。这个巨大的文件包含一堆代码。在这段代码中,每个函数都是以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;
}
/**--------------------------------------------------------------------------**\
函数名
成功时返回1。
失败时返回0。
这个函数是一个函数。
\**--------------------------------------------------------------------------**/
int FunctionName()
{
int X=1;
如果(X==1)
返回1;
返回0;
}
预期产出:

<summary>FunctionName</summary>
<returns>
    Returns 1 on success.
    Returns 0 on failure.
</returns>
<remarks>
    This function is a function.
</remarks>
FunctionName
成功时返回1。
失败时返回0。
这个函数是一个函数。

您可以使用以下模式:

/^\/(\*\*-+\*\*)\\$(.*?)^\\\1\/$|./gsm
并替换为
$2

工作示例:

这个技巧基本上与使用中的交替相同,以匹配我们需要的内容,并跳过我们不想要的所有内容

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

  • ^
    $
    不是严格需要的-这取决于注释是否在整行上。您可以删除它们,并删除
    /m
    (多行)标志
  • \/(\*\*-+\*\*)\\
    匹配注释的整行,
    /***----***
  • 我们假设在块的开头和结尾的连字符数相同,并将其捕获到
    \1
    。如果不正确,请再次使用
    \*\*-+\*\*
    而不是
    \1
    。如果有固定数量的连字符,可以使用
    -{74}
  • 有趣的内容被捕获到
    $1
  • 其他所有内容都由
    匹配,并替换掉
  • 警告:此模式可能以通常的方式失败-包含
    “/**-”
    的字符串、看起来像文档的注释代码、转义字符等

那么您想创建一个仅包含文档注释的文档?不要将其视为删除或排除您不想要的部分,只需匹配您想要的部分并将其写入新文件即可。