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

Regex 匹配由一个或多个单行注释组成的多行注释块,regex,plaintext,Regex,Plaintext,我需要一个正则表达式,它将匹配由一个或多个单行注释组成的注释块 单行注释: # 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 注释行的第一个字符可以以以下任意字符开头:;#%|* 我发现以下正则表达式与单个注释行相匹配:[;#%|*]

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

单行注释:

# 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次或多次出现以新行开头的组,可选空格,后跟注释的开头字符和行的其余部分:

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

  • [##%|*]
    -初始注释字符
  • *
    -第一行的其余部分
  • (?:(?:\r\n |\r |\n)*[#%|*].*)
    -重复0次或更多次:
    • (?:\r\n |\r |\n)
      -换行符(如果您事先知道换行符的格式,您可以将其简化,例如,可能只需
      \n
    • 空格后跟*-0或更多空格
    • [##%|*]
      -初始注释字符
    • *
      -行的其余部分

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

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

      您的第二个示例不是IMO的多行注释,而是多个单行注释。我编辑了该块上方的文本以反映这一点。我在一些示例文本上尝试了您的建议,它选择了文件中第一个注释块之后一直到文件末尾的所有内容。目前,您的版本与单行注释匹配,但与作为一个块的多行注释不匹配。我通过@certainperformance为我找到了答案。