perl - 仅从函数定义中提取,而不是从函数声明中提取

时间:2013-10-04 12:37:09

标签: regex perl

文件包含功能定义和功能声明

eErrorT ChainCtrlUpdateCameraRoute(ChainCtrlT* pChainCtrl, RouteListItemT* pNewRoute, RouteListItemT* pCurrRoute);

eErrorT ChainCtrlSetJpgSnapshotFile(ChainCtrlT* pChainCtrl, RouteListItemT* pRoute, char * dst_chain, char *jpg_file_path)
{

} 

我的代码

use strict;
use warnings;
use vars qw(@temp $index $i);

open(my $FILE, "< a.c") or die $!;
my @arr = <$FILE>;
foreach(@arr){  
   if($_ =~ /^ \S+ \s+ \S+ \s* \( (.+?) \) /xsmg) {    # extracts function arguments
      my $arg = $1;
      my @arr = map /(\w+)$/, split /\W*?,\W*/, $arg;
      print @temp = map "$_\n", @arr;
     }
} 

GIVES OUTPUT

pChainCtrl
pNewRoute
pCurrRoute
pChainCtrl
pRoute
dst_chain
jpg_file_path

需要输出

pChainCtrl
pRoute
dst_chain
jpg_file_path

我只需要从函数定义(ChainCtrlSetJpgSnapshotFile)而不是声明(ChainCtrlUpdateCameraRoute)中提取参数。

我需要查看带(..)的行是否没有“;”在同一行。但我无法获得正则表达式命令

1 个答案:

答案 0 :(得分:2)

试图理解什么是技术(词汇)差异,我看到“;”在定义的最后,没有没有“;”在宣言结束时。另外你有一个{在下一行。

利用这些功能(如果它们是有用的,手指x')

#ignore lines with ; (followed by optional spaces) at the end
print @temp = map "$_\n", @arr 
    unless $_ =~ /;\s*$/;

一个选项可能是{在下一行,只打印上一行,如果你有一个匹配,这行以{开头。 (留作练习......)