Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl regex-在C文件中查找函数并打印它们的定义_Regex_Perl - Fatal编程技术网

Perl regex-在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

--更新--

我想在文件中找到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 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].*)