自动解析PHP以将PHP代码与HTML分离
我正在开发一个大的PHP代码库;我想将PHP代码与HTML和JavaScript分开。 (我需要对PHP代码进行多次自动搜索和替换,并在HTML上进行不同的搜索和替换,并且在JS上有所不同)。是否有一个很好的解析器引擎可以为我分离PHP?我可以使用正则表达式来做到这一点,但它们并不完美。我可以在ANTLR中构建一些东西,但是一个好的现有解决方案将是最好的。
我应该说清楚:我不想要或不需要一个完整的PHP解析器。只需要知道给定的令牌是否:
- PHP代码
- PHP单引号字符串
- PHP双引号字符串
- PHP评论
- 不是PHP,而是HTML / JavaScript
没有找到相关结果
已邀请:
3 个回复
膝垫富顷
细瑞
对于其他人来说,最好使用DOM解析器。隔离
部分(和外部脚本,甚至
事件)很容易。 但是,从解析的DOM树重新构建相同的文档可能很难 - 我想这取决于您需要对结果做什么以及原始HTML的清洁程度。正则表达式(yuck!)可以更好地适用于该部分。
掸牛浓疗
此规则是用DMS的规则规范语言(RSL)编写的,显然不是PHP。引号内的东西是PHP代码;这些是围绕被操作的程序设计语言的文本的元引号。 chararacter是一个元转义: s表示必须与字符串文字匹配的元变量, uppercase是RSL语言外部的DMS函数的名称,而()是元函数调用大写的元括号,应用于匹配的字符串 s。因为规则在AST上运行,所以不能混淆;它不会改变/ * echo'def'* /的文本,因为这不是一个声明。 您可能需要几个规则来处理各种语法组合:在这种情况下,STRING只引用单引号的文字字符串;双引号字符串不是单片实体,而是由一系列QUOTED_STRING_FRAGMENTS组成,这些QUOTED_STRING_FRAGMENTS对应于双引号字符串中PHP表达式之间的双引号字符串中的文本。 在转换过程结束时,更改的AST将使用原始缩进和注释完成,除非应用了转换。 对于DMS,也有一个完全语言准确的JavaScript解析器,如果您想要准确处理SCRIPT标签的内容,则需要这些解析器。 如果您想对源代码进行可靠的更改,这个恕我直言是唯一的好方法。你可以尝试字符串黑客和正则表达式,但解析PHP需要一个无上下文的解析器而RE不会这样做,所以你得到的任何结果都不值得信任。