Regex参数分析



我需要解析一个包含函数调用的文件。例如:

function(otherFunction1(parameters1), otherFunction2(parameters2))

我需要输出为:

otherFunction1(parameters1), otherFunction2(parameters2)

我的尝试是:

open(my $DATA, '<', 'txt') or die "...";
while(my $line = <$DATA>){
    $line =~ /((w+))/;
    my $parameters  = $1;
    print "$parametersn";
}

我刚收到

parameters1

有没有一种方法可以使用regexp来查找指定字符的第一个和最后一个出现?

谢谢!

您需要一个递归正则表达式才能正确执行此操作。与此类似(带有x标志):

(?(DEFINE)
  (?<fn>                 # a function is:
    w+ s*              # a name
    ( (?&paramList) )  # and a parameter list
  )
  (?<paramList>
    (?:
      s* (?&param)
      (?: , s* (?&param) )* s*
    )* 
  )
  (?<param>   # a parameter is:
    (?&fn)    # a function call
    | w+     # or a simple value
  )
)
w+ s* ( (?<extractedParameters>(?&paramList)) )

演示。

这是匹配左括号和右括号所必需的。只需根据需要扩展语法即可。

底部的模式等效于(?&fn),只是它将参数列表包含在捕获组中。

你几乎有了。你确实想要每行第一个和最后一个括号之间的所有内容,对吧?除非要解析的行比您的示例更复杂,否则您可能只需要对代码进行一些小的更改。

$line =~ /((.*))/;
my $parameters = $1;

您的w+将在字符串中的第一个非单词字符处停止匹配。在您的示例中,这是第一个右括号。

最新更新