正则表达式,用于标识COBOL中的节

时间:2014-08-06 06:20:41

标签: regex cobol regex-lookarounds adobe-brackets

我正在为Brackets定制一个大纲插件,它使用正则表达式来识别当前打开的文件的轮廓。

使用regex101.com我创建了以下正则表达式(使用外观来确定该行以七个空格开头并以'SECTION'结尾。):

(?<=^       )([A-Za-z\-0-9]*)(?= SECTION\.[ ]*$)

根据regex101.com,没关系,但是当通过jshint / jslint验证时,它表明它无效。当我测试它时,它不起作用(我怀疑JSHint / JSLint是正确的。)

以下是一些cobol代码示例,我希望获得2000-GET-EXPECTED-BY-DATE和2020-GET-DUE-DATE。

          ...
      2000-GET-EXPECTED-BY-DATE SECTION.
          MOVE '2' TO W10-OPTION.

          ...

          ELSE                                                     
              MOVE 'Y' TO W10-NO-ERRORS                         
          END-IF.                                                  

      2017-EXIT.                                                   
          EXIT.                                                   
     /
      2020-GET-DUE-DATE SECTION.
      2020.

          MOVE 'N' TO W10-USER-INPUT-DUE-DATE-SW.
          MOVE '1' TO W10-OPTION.
          ...

所以我的问题是:

  • 正则表达式是否有效?
  • 如果无效,那我做错了什么?
  • 我应该如何编写正则表达式来查找每个部分的名称?

2 个答案:

答案 0 :(得分:1)

这适用于我找到带有“SECTION”的行:

^[ ]{7}(.*)[ ]SECTION\.$

DEMO: http://regex101.com/r/zC1xY6/2

如果您只想要部分名称:^[ ]{7}\d+\-(.*)[ ]SECTION\.$

答案 1 :(得分:0)

事实证明,我用过的东西确实有效,有两条评论:

  • 通过regex101.com
  • 使用时,需要添加全局和多行修改器
  • 执行速度非常慢,因此regex101.com会在大型程序上超时。

然而,我发现(通过regex101.com上的实验)如果我将其更改为

^       (.*)(?= SECTION\.[ ]*$)

然后它没有超时问题。似乎如果我使用^[ ]{7}作为前缀,或者我使用([A-Za-z0-9-]*)作为匹配名称的捕获组,则它非常慢。

(.*)相比,主要问题似乎是([A-Za-z0-9-]*)的效果,后者慢得多。

我可以使用regex101.com上的外观:(?<=^ )(.*)(?= SECTION\.[ ]*$),但是它在JSLint / JSHint中出错了。所以我会避免使用它。

我在括号大纲程序的一个分支中测试了第一个^ (.*)(?= SECTION\.[ ]*$)并且它有效! : - )