正则表达式忽略 Cobol 注释行

Regex to ignore Cobol comment line

我想使用正则表达式扫描几个 Cobol 文件以查找特定单词但跳过注释行。 Cobol 注释在 7. 列上有一个星号。到目前为止,我使用负面回顾得到的正则表达式如下所示:

^(?<!.{6}\*).+?COPY

匹配两行:

      *     COPY
            COPY

我假设 .+?以某种方式覆盖负面回顾,但我坚持如何纠正这个问题。我需要修复什么才能获得仅匹配第二行的正则表达式?

如果您想过滤掉每条评论,您可以使用:

^ {6}(?!\*)

这将只匹配以空格开头且第 7 个位置没有“*”的行。

COBOL 可以使用位置 1-6 对行进行编号,因此仅使用可能更安全:

^.{6}(?!\*).*$

您可以使用先行而不是后行:

^(?!.{6}\*).+?COPY

参见regex demo

lookbehind 要求在字符串开始之前缺少一些模式,因此是多余的,它总是返回 true。前瞻检查当前位置右侧的模式

所以,

  • ^ - 匹配字符串的开头
  • (?!.{6}\*) - 如果字符串开头有任何 6 个字符后跟 *,则匹配失败(如果需要,请将 . 替换为 space只匹配 spaces)
  • .+? - 匹配任何 1 个以上的字符,尽可能少,直到第一个
  • COPY -COPY 子串。