我需要解析一个包含函数调用的文件。例如:
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 "$parameters\n";
}我只是想
parameters1是否有一种方法可以使用regexp查找指定字符的第一次和最后一次出现?
谢谢!
发布于 2015-03-23 17:53:51
您将需要一个递归正则表达式来正确地完成它。与此类似(带有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),除非它将参数列表包含在捕获组中。
发布于 2015-03-23 23:26:25
你差点就有了。你需要每一行的第一个括号和最后一个括号之间的所有东西,对吗?除非要解析的行比您的示例更复杂,否则您可能需要对代码进行小小的更改。
$line =~ /\((.*)\)/;
my $parameters = $1;您的\w+将在字符串中的第一个非字字符处停止匹配。在您的示例中,这是第一个右括号.
https://stackoverflow.com/questions/29216933
复制相似问题