总而言之,看起来我将负责重写我工作的文本解析引擎。
所以,就像你想象的那样:一个文本块进来,本文中有自定义标签,一些简单的一次性替换,一些带内容的块,一些嵌套等等。一些标签有参数/值对,等
虽然我已编码多年,但我会说我是一名中级正则表达式用户;我是第一个承认核心文本解析不是我的强项的人。这需要快速,因此优化是一个问题。
我正在寻找关于这种解析的模式和评论的信息来源。我愿意阅读任何你提供的任何内容。在我开始考虑如何解决这个问题之前,我需要先自学。
非常感谢,提前。
答案 0 :(得分:2)
如果这比使用一个人可以轻松理解的简单状态机所做的更复杂,我会建议使用工具生成标记器:flex / jflex / {{ 3}}。
如果速度是一个非常大的问题,您也可以创建一个手工制作的自顶向下解析器,或者您可以使用解析器生成器(例如etc等)。手工工艺解析器通常更快,但有可能创建一些讨厌的角落情况:)。你需要一套很好的测试用例。
我建议你从这里开始:ANTLR。查看递归下降解析(如果您的语言不是很复杂,则可以更容易手工编写并且可理解)。
答案 1 :(得分:1)
好吧,首先,正则表达式不能用于解析嵌套结构。你必须编写一个解析器。有许多工具可以帮助您,从古老的yacc
到antlr
再到更多。查看wikipedia page。
答案 2 :(得分:1)
使用Perl 6规则。他们将语法折叠成语言。相当强大。自Perl 5.10以来不称为正则表达式,即使它看起来像正则表达式。现在它是语言,代码和正则表达式不可分割的组成部分。
http://tripatlas.com/Perl_6_rules
http://www.programmersheaven.com/2/Perl6-FAQ-Regex
答案 3 :(得分:1)
您还可以使用Marpa parser,这将为您提供一般实用BNF解析的好处 - an example,another example。
答案 4 :(得分:0)
绝对不要尝试使用正则表达式。使用解析器。如果文本是xml,那么将有许多以您喜欢的语言提供的解析器。如果它不是xml,那么你将不得不编写自己的自定义解析器。