正则表达式忽略Cobol评论行

时间:2018-04-13 11:07:23

标签: regex cobol

我想使用正则表达式扫描一些Cobol文件以查找特定单词但跳过注释行。 Cobol评论在7.列上有一个星号。到目前为止,使用负面外观的正则表达式看起来像这样:

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

它匹配两行:

      *     COPY
            COPY

我会认为。+?以某种方式压倒负面的背后,但我仍然坚持如何纠正这一点。我需要修复什么来获得只匹配第二行的正则表达式?

2 个答案:

答案 0 :(得分:2)

您可以使用前瞻而不是后瞻:

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

请参阅regex demo

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

所以,

  • ^ - 匹配字符串的开头
  • (?!.{6}\*) - 如果从字符串的开头跟随*后面有6个字符,则匹配失败(如果您只需要匹配空格,请用空格替换.)< / LI>
  • .+? - 匹配任何1个字符,尽可能少,直到第一个
  • COPY - COPY substring。

答案 1 :(得分:0)

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

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

这将仅匹配以第7位没有'*'的空格开头的行。

COBOL可以使用位置1-6对行进行编号,因此可能只是使用:

{{1}}