匹配由一个或多个单行注释组成的多行注释块

Match multiple line comment blocks composed of one or more single line comments

我需要一个正则表达式来匹配由一个或多个单行注释组成的注释块。

单行注释:

# This is a single line comment

由多个单行评论组成的评论块:

# This is a multiple line comment
# which is just a block of single line comments
# that are strung together

注释行的第一个字符可以以下任何字符开头:;#%|*

我发现以下正则表达式匹配各个注释行:[;#%|*]{1}(.+)

但我不知道如何匹配多于一行的块。 我想保留整个块中的所有字符,包括新行。

匹配注释的开头及其行的其余部分,然后重复 0 次或多次出现以换行符开头的组,可选 spaces,后跟注释起始字符和该行的其余部分:

[;#%|*].*(?:(?:\r\n|\r|\n) *[;#%|*].*)*

this regex demo

  • [;#%|*] - 初始注释字符
  • .* - 第一行的其余部分
  • (?:(?:\r\n|\r|\n) *[;#%|*].*)* - 重复 0 次或多次:
    • (?:\r\n|\r|\n) - 换行符(如果你事先知道换行符的格式,你可以简化它,例如,也许只是 \n)
    • space 后跟 * - 0 个或多个 spaces
    • [;#%|*] - 初始注释字符
    • .* - 其余行

我的猜测是,在这里我们可能需要一个可以传递换行符的表达式,例如

[;#%|*]([\s\S].*?)(?=[\r\n])

DEMO