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



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

单行注释:

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

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

请参阅此正则表达式演示。

  • [;#%|*] - 初始注释字符
  • .* - 第一行的其余部分
  • (?:(?:rn|r|n) *[;#%|*].*)* - 重复 0 次或更多次:
    • (?:rn|r|n) - 换行符(如果您事先知道换行符的格式,则可以简化此操作,例如,也许只是n(
    • 空格后跟 * - 0 个或更多空格
    • [;#%|*] - 初始注释字符
    • .* - 其余线路

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

[;#%|*]([sS].*?)(?=[rn])

演示

最新更新