一些程序员说他们“......厌倦了使用正则表达式来解析真正不应该用正则表达式解析的东西”(参见这个流行的@nickf 评论)。像我这样的其他人更喜欢使用 PHP(和正则表达式)进行更多编程并避免使用另一个框架(如Lex/Yacc)......但不是“更多”,这是第一个问题:
当我们必须避免创建(复杂的)PHP 解析器,迁移到真正的“解析器生成器引擎”时?
完成第一个问题的第二个问题是“什么是解析复杂事物的最佳 PHP 工具包”?今天,2013 年,有一个标准的可互操作解析器内容、XML(或SimpleXML 数组等)和“标准解析器”,如DOM API、 XPath和XSLT。
正如我所描绘的那样,也许没有“最佳解决方案”,但有时选择一个解决方案,然后选择另一个解决方案的良好做法配方。
总结:1)“我们什么时候应该离开纯 PHP 或 PHP+RegEx,使用解析器生成器?”;2) “什么是 PHP 的最佳解析器生成器,或者选择最佳解析器的配方/上下文/条件?”
(添加编辑版本)
我认为读者会喜欢一般性的讨论,但是,为了给出指导,这里有一些范围:
(回答@HugoDelsing)总的来说,我“不在乎它是如何工作的,但想要快速获得结果”。在某些情况下,当我“想要完全控制一切”时,我需要优化。
(回答@bizzehdee)近年来,我在解析多种文本字符串:受控词汇的原始文本; Lex URN;References/Bibliography 的原始文本和另一个 stiling 文本,如Vancouver Style;CSS 字符串;日期; 电子邮件文本;单位和方程(识别、规范化和最终转换)。在另外一次,我开发了简单的命令行工具。
好奇心(是我发布这个问题的动机):我对使用“Lex/Yacc 方法的 PHP 替代方案”的回答每个月都在波动,有正面和负面的“有用投票”......也许这只是一个迹象,表明有“恨与爱”的行为,但另一方面,这可能是一个好问题!