在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
任何人都可以帮助我如何让它适用于这两种情况吗?
答案 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还是其他解析器。利用您的时间将现有的解析器集成到您的项目中,而不是重新发明轮子。