Perl regex-在C文件中查找函数并打印它们的定义
--更新-- 我想在文件中找到C函数并打印它们的定义 例如: 对于此输入:Perl regex-在C文件中查找函数并打印它们的定义,regex,perl,Regex,Perl,--更新-- 我想在文件中找到C函数并打印它们的定义 例如: 对于此输入: #include <stdlib> int function(int a) { return a; } void func2() { int b = 1; } int func3(int a,int b) { a = a +b; while(x) { x--; } return a; } int main(int ar
#include <stdlib>
int function(int a)
{
return a;
}
void func2()
{
int b = 1;
}
int func3(int a,int b)
{
a = a +b;
while(x) {
x--;
}
return a;
}
int main(int argc, char* argv[])
{
int x=(a+1);
return 0;
}
这是我的代码:
#!/usr/bin/perl -w
open(FILE, "<", $ARGV[0]) or die "file open error";
if ( @ARGV ) #if there are args
{
if ( -f $ARGV[0] ) #if its regular file
{
while(<FILE>)
{
if ($_ =~ /(.+)\s(.+)\(/){
print $1; # type in arg $1
print "\n";
print $2; # name in arg $2
print "\n";
}
}
}
else{
print "Arg is not a file\n";}
}
else{
print "no args\n";}
#/usr/bin/perl-w
打开(文件“尝试/(\S+)\S+(\S+\([^)]*\)/
,然后打印$1+$2+”\n“
要防止带有负前瞻的main
:
/(\S+)\s+((?!main)\S+\([^)]*\))/
如果不支持前瞻:
/(\S+)\s+((m|ma|mai|[^m].*|m[^a].*|ma[^i].*|mai[^n].*)\([^)]*\))/
负责避免main
的部件:
(m|ma|mai|[^m].*|m[^a].*|ma[^i].*|mai[^n].*)
您甚至没有一个用于函数参数的插槽?做得好。可以避免使用“main”字吗?perl是否支持前瞻?/(\S+)\S+((?!main)\S+\([^)]+\))/
它的主要功能非常好,但除了“int”类型外,不打印其他功能。还有应该打印的void函数。当我将上一个+
更改为*
时工作。void函数为空:)@Piodo谢谢,修复了。
(m|ma|mai|[^m].*|m[^a].*|ma[^i].*|mai[^n].*)