【问题标题】:Reading a text config file: using regex to parse读取文本配置文件:使用正则表达式解析
【发布时间】:2011-07-08 19:44:42
【问题描述】:

寻找一种使用多行正则表达式匹配器读取以下配置文件示例的方法。我可以逐行读取文件,但我想了解灵活的正则表达式匹配的细节。

所以配置文件中的代码块如下:

blockName BLOCK
     IDENTIFIER value
     IDENTIFIER value
     IDENTIFIER
          "string literal value that
          could span multiple lines"

标识符的数量可以是 1..infinity。 IDENTIFIER 可以是 NAME、DESCRIPTION、TYPE 等。

我以前从未使用过多行正则表达式。我对这个过程不是很熟悉。我本质上是想通过这个正则表达式使用一个findAll函数将所有解析的块数据放入一个数据结构中进行处理。

编辑:澄清:我只想阅读这个文件一次。我不在乎效率或优雅。我想将信息读入数据结构,然后以不同的格式吐出。这是一个大文件(3000 行),我不想手动执行此操作。

【问题讨论】:

  • 你最好为此编写一个合适的词法分析器和解析器。
  • 您使用什么语言/工具(例如 Perl、Python、JavaScript、PowerShell 等)?每个都有自己的正则表达式风格,每种风格都有自己的一套功能和怪癖。

标签: regex parsing multiline


【解决方案1】:

我不认为正则表达式是最好的工具。

【讨论】:

    【解决方案2】:

    试试这个,它应该可以在 perl 正则表达式中工作:

    ([\w\d]*)\s+BLOCK\s*\n(\s*(NAME|DESCRIPTION|TYPE|...)\s*([\w\d]*|"(.*)")\s*\n)+
    

    我在REGex TESTER 使用以下测试文本对其进行了验证:

    blockName BLOCK
         NAME value
         NAME value
         DESCRIPTION
              "string literal value that
              could span multiple lines"
    otherName BLOCK
         NAME value
         TYPE value
         DESCRIPTION
              "string literal value that
              could span multiple lines"
    

    如果文件以换行符结尾,它只会找到最后一个块/标识符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      相关资源
      最近更新 更多