【问题标题】:Match multiple line comment blocks composed of one or more single line comments匹配由一个或多个单行注释组成的多行注释块
【发布时间】:2019-10-30 03:15:40
【问题描述】:

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

单行注释:

# 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}(.+)

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

【问题讨论】:

  • 您的第二个示例不是多行注释 IMO,它是多个单行 cmets
  • 很公平。我编辑了该块上方的文本以反映这一点。

标签: regex plaintext


【解决方案1】:

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

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

DEMO

【讨论】:

  • 我在一些示例文本上尝试了您的建议,它选择了文件中从第一个评论块到文件末尾之后的所有内容。
  • 目前您的版本匹配单行 cmets 但不匹配多行作为一个块。我发现@certainperformance 的答案对我有用。
【解决方案2】:

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

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

https://regex101.com/r/tpe43D/2

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

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    相关资源
    最近更新 更多