我是在PHP中编写自己的简单语法高亮显示器。我已经完成了基于正则表达式和字符串替换的基本算法,但我真正不知道的是如何禁用替换被注释的关键字。
例如:
/**
* Some class
*
* @property-read $foo
*/
class Test
{
private $foo;
public function __construct()
{
}
}
现在我的解决方案只是突出显示已定义的关键字(如类或变量),以及已注释的关键字。
针对此问题的任何解决方案?
答案 0 :(得分:5)
为什么不使用PHP的tokenizer为您完成这项工作?这样,你的语法高亮显示器将以与Zend引擎完全相同的方式解析PHP代码,这可能会比正则表达式提供更好的结果。
答案 1 :(得分:1)
为什么不借鉴vi或vim如何做到这一点?很久以前我记得我们开发的一些基于自定义标签的语言,我们想要在VI和VIM中使用语法高亮,也就是当我们更改了几个.vi类型的配置文件时我们提到过,所有的元数据就像哪种颜色到哪种颜色的标签什么是可能的标签等。
详细了解vi或vim或任何文本编辑器如何做到这一点可能会更有帮助!
答案 2 :(得分:0)
您可以通过以下逻辑排除注释行:
如果行以/**
开头,则禁用高亮显示
如果下一行以*
开头,则不执行任何操作并检查下一行
如果行以*/
重新启用突出显示
只是一个快速的猜测,可以更精确地定义,但应该作为逻辑。