Regex 正则表达式参数解析
我需要解析一个包含函数调用的文件。例如:Regex 正则表达式参数解析,regex,perl,parsing,parameters,Regex,Perl,Parsing,Parameters,我需要解析一个包含函数调用的文件。例如: function(otherFunction1(parameters1), otherFunction2(parameters2)) 我需要输出为: otherFunction1(parameters1), otherFunction2(parameters2) 我的尝试是: open(my $DATA, '<', 'txt') or die "..."; while(my $line = <$DATA>){ $line =
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";
}
是否有方法使用regexp查找指定字符的第一个和最后一个匹配项
谢谢 您需要一个递归正则表达式来正确地执行它。与此类似(带有
x
标志):
(?(定义)
(?#函数是:
\w+\s*#一个名称
\((?¶mList)\)\和参数列表
)
(?
(?:
\s*(?&参数)
(?:,\s*(?¶m))*\s*
)*
)
(?#参数为:
(?&fn)#函数调用
|\w+#或简单值
)
)
\w+\s*\(((?(?¶mList))\)
这是匹配开始括号和结束括号所必需的。只需根据需要扩展语法即可
底部的模式相当于
(?&fn)
,只是它将参数列表包含在捕获组中。您几乎拥有了它。您确实需要每行第一个和最后一个括号之间的所有内容,对吗?除非要解析的行比您的示例更复杂,否则您可能只需要对代码进行这个小小的更改
$line =~ /\((.*)\)/;
my $parameters = $1;
您的
\w+
将在字符串中的第一个非单词字符处停止匹配。在您的示例中,这是第一个右括号。第一个:/c/
。最后一个/^.*c/s
(?(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)) \)
$line =~ /\((.*)\)/;
my $parameters = $1;