我正在尝试做一个正则表达式来查看一个预先存在的代码库,该代码库似乎滥用了变量引用和函数调用上的php错误抑制字符(@
)。因此,我想搜索整个代码库以创建所有用法的列表。问题是,大部分代码还包括perldoc,我不确定如何排除明显的注释。
大多数Perldoc似乎都是由最少的空白-紫苑-空白来预测的。 例如:
/**
* @param int $somvar
*/
因此,它可以与类似的东西匹配 /^'s*'*'s+/
合理一致。
我用来查找错误抑制字符的用法(但也抓住perldoc)的正则表达式是:
/(@['$'w]['w'd]*)/
除了捡起所有的perldoc之外,它的结果令人满意。
我尝试查看一些负面展望的例子,但似乎并没有用我尝试过的任何东西来回避那些perldoc评论。一个不起作用的示例如下:
(?!'s*['*'/])(@['$'w]['w'd]*)
任何帮助不胜感激
您可以使用 PHP 的token_get_all()
来查找所有 @ 符号而不是正则表达式。通过这种方式,您可以让 PHP 自己的内部解析器为您解析文件:
$source_file = 'source_file_to_open.php';
$source = file_get_contents($source_file);
$tokens = token_get_all($source);
// Loop through all the tokens
for ($i=0; $i < count($tokens); $i++) {
// If the token is equal to @, then get the line number (3rd value in array)
// of the *following* token because the @ does not have a line number because
// it's not listed as an array, just a string.
if ($tokens[$i] == '@') {
echo "@ found in $source_file on line: {$tokens[$i+1][2]}<br />'n";
}
}