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

时间:2019-06-16 03:38:45

标签: 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

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

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

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

2 个答案:

答案 0 :(得分:1)

匹配注释的开头,行的其余部分,然后重复出现0个或更多的组,该组以换行符,可选的空格开头,然后是注释开始字符和行的其余部分:

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

DEMO

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

答案 1 :(得分:0)

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

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

enter image description here