使用Perl从函数名后面的函数中提取函数参数

时间:2013-12-29 20:53:53

标签: regex perl

在Perl中使用regex在C文件中搜索函数后,我想提取其参数。

我的代码

... #after searching for functions
if ($src_line1 =~ /^ \S+ \s+ (\S+) \s* (\( .+? \)) /xsmg) { 
        my @args = $2 =~ /(\w+)[,)]/g;                      #extracts function arguments

但我的代码适用于以下功能:

int abc(int i, int j)

但不适用于功能:

int xyz (int k, int l)        #having space after function name

任何人都可以帮助我如何让它适用于这两种情况吗?

1 个答案:

答案 0 :(得分:1)

您的代码确实有效:

$ cat cparser.pl
#!/usr/bin/perl

use strict;

my @src_lines = ("int abc(int i, int j)",
                 "int xyz (int k, int l)");

foreach my $line (@src_lines) {
    my @args = ();
    if ($line =~ /^ \S+ \s+ (\S+) \s* (\( .+? \)) /xsmg) {
        @args = ($2 =~ /(\w+)[,)]/g);
    }
    printf "%-25s %s\n", $line, (join ", ", @args);
}

$ perl cparser.pl
int abc(int i, int j)     i, j
int xyz (int k, int l)    k, l

但是,查看现有的解析器可能是明智的,无论是Perl还是其他解析器。利用您的时间将现有的解析器集成到您的项目中,而不是重新发明轮子。