我想在一个文件中找到所有函数--这没问题:
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);问题是,如果有Javascript函数,他们也会加入这个方案。
它甚至可能只获得PHP-函数。其中一个指标是<script>-Tag,但我不知道如何只跟踪函数,这些函数不会被script-Tag所超越!
谢谢!
发布于 2015-08-04 16:09:37
写完这个问题后,我有了的想法。
$data = file_get_contents($file);
$data = preg_replace("/<script[^>]*>[\s\S]*?<\/script>/", "", $data);
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);只需删除所有的<script>-Tags!如果以后需要它们,也可以保存它们(而不是替换它们),然后再添加它们!
如果其他人也会有同样的问题!
发布于 2019-08-22 19:46:05
一种选择是在处理之前删除所有的<script>...</script>标记,但这假设您将只在这些标记中直接在文件中使用JavaScript。如果您有一个为您生成HTML的函数或库,则可以输出JavaScript代码,而不必显式地将<script>...</script>标记放在PHP文档中。问题是,您正在使用模式匹配,这可能会导致一系列错误阳性。
要一起删除这些假阳性,可以使用PHP ReflectionFunction类来确定哪些函数是在PHP中定义的,哪些不是定义的。一旦您有了一个可能的函数名数组,请使用以下内容:
$data = file_get_contents($file);
$outputData;
$validMatches=array();
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);
foreach($outputData[1] as $match) {
$isValid=true;
try {
$reflection = new \ReflectionFunction($match);
} catch (\ReflectionException $e) {
$isValid=false;
}
if($isValid == true) {
$validMatches[]=$match;
}
}这是更详细的,但它将保证您将得到一个只包含PHP函数名的列表。
https://stackoverflow.com/questions/31814018
复制相似问题