我需要解析一个包含函数调用的文件。例如:
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
( (?¶mList) ) # and a parameter list
)
(?<paramList>
(?:
s* (?¶m)
(?: , s* (?¶m) )* s*
)*
)
(?<param> # a parameter is:
(?&fn) # a function call
| w+ # or a simple value
)
)
w+ s* ( (?<extractedParameters>(?¶mList)) )
演示。
这是匹配左括号和右括号所必需的。只需根据需要扩展语法即可。
底部的模式等效于(?&fn)
,只是它将参数列表包含在捕获组中。
你几乎有了。你确实想要每行第一个和最后一个括号之间的所有内容,对吧?除非要解析的行比您的示例更复杂,否则您可能只需要对代码进行一些小的更改。
$line =~ /((.*))/;
my $parameters = $1;
您的w+
将在字符串中的第一个非单词字符处停止匹配。在您的示例中,这是第一个右括号。