正则表达式忽略 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
子串。
我想使用正则表达式扫描几个 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
子串。