我想使用正则表达式扫描一些Cobol文件以查找特定单词但跳过注释行。 Cobol评论在7.列上有一个星号。到目前为止,使用负面外观的正则表达式看起来像这样:
^(?<!.{6}\*).+?COPY
它匹配两行:
* COPY
COPY
我会认为。+?以某种方式压倒负面的背后,但我仍然坚持如何纠正这一点。我需要修复什么来获得只匹配第二行的正则表达式?
答案 0 :(得分:2)
您可以使用前瞻而不是后瞻:
^(?!.{6}\*).+?COPY
请参阅regex demo。
lookbehind在字符串开始之前需要一些模式,因此是多余的,它总是返回 true 。 Lookaheads检查位于当前位置右侧的模式。
所以,
^
- 匹配字符串的开头(?!.{6}\*)
- 如果从字符串的开头跟随*
后面有6个字符,则匹配失败(如果您只需要匹配空格,请用空格替换.
)< / LI>
.+?
- 匹配任何1个字符,尽可能少,直到第一个COPY
- COPY
substring。答案 1 :(得分:0)
如果您想过滤掉每条评论,可以使用:
^.{6}(?!\*).*$
这将仅匹配以第7位没有'*'的空格开头的行。
COBOL可以使用位置1-6对行进行编号,因此可能只是使用:
{{1}}