2

我有一个用于查找所有函数定义的正则表达式。我现在要做的是获取函数中的内容,例如第三个字段是否可以使用正则表达式,或者由于括号$matches的嵌套,我是否需要一些推式弹出机器?{}我想做的是一个脚本,它分析 php 代码并找出哪些函数具有依赖关系。如果已经有脚本,请告诉我!

$content = file_get_contents($fileName);
preg_match_all("/(function )(\w+\(.*?\))/", $content, $matches);

我不想使用 php-tokenizer,因为它还发现了一些“隐藏函数”,比如预定义函数之类的东西,但我只想要用代码编写的函数。

4

1 回答 1

2

即使你不是Noam Chomsky是好是坏,你也应该明白这一点:

PHP 不是正则语言,所以不能用正则表达式表达或解析。

要成为常规语言,除其他外,语言需要与上下文无关

语言等级

“上下文无关”意味着语言中的“单词”无论出现​​在哪里都意味着相同的事物。这不是 PHP 的情况。事实上,即使是用于查找函数签名的简单代码段也已经在此处崩溃和烧毁:

// function foo()

注释的上下文使 thisfunction关键字的通常含义无效。更何况:

'function foo()';
<<<HERE
    function foo()
HERE;

和许多类似的例子。关键字(以及其他所有function内容)都依赖于context,使 PHP 成为一种上下文敏感的语言,因此不是正则的,因此不能被正则表达式解析。

使用解析器

于 2013-05-28T07:23:20.650 回答