Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取文本配置文件:使用regex解析_Regex_Parsing_Multiline - Fatal编程技术网

读取文本配置文件:使用regex解析

读取文本配置文件:使用regex解析,regex,parsing,multiline,Regex,Parsing,Multiline,正在寻找使用多行正则表达式匹配器读取以下配置文件示例的方法。我可以逐行读取文件,但我想了解灵活正则表达式匹配的细节 因此,配置文件中填充了如下代码块: blockName BLOCK IDENTIFIER value IDENTIFIER value IDENTIFIER "string literal value that could span multiple lines" 标识符的数量可以是1..无穷大。标识符可以是名

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

因此,配置文件中填充了如下代码块:

blockName BLOCK
     IDENTIFIER value
     IDENTIFIER value
     IDENTIFIER
          "string literal value that
          could span multiple lines"
标识符的数量可以是1..无穷大。标识符可以是名称、描述、类型等

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


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

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

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

([\w\d]*)\s+BLOCK\s*\n(\s*(NAME|DESCRIPTION|TYPE|...)\s*([\w\d]*|"(.*)")\s*\n)+
我使用以下测试文本对其进行了验证:

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"

只有当文件以换行符结尾时,它才会找到最后一个块/标识符

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