首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex参数解析

Regex参数解析
EN

Stack Overflow用户
提问于 2015-03-23 17:47:33
回答 2查看 43关注 0票数 0

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

代码语言:javascript
复制
function(otherFunction1(parameters1), otherFunction2(parameters2))

我需要的输出是:

代码语言:javascript
复制
otherFunction1(parameters1), otherFunction2(parameters2)

我的尝试是:

代码语言:javascript
复制
open(my $DATA, '<', 'txt') or die "...";
while(my $line = <$DATA>){
    $line =~ /\((\w+)\)/;
    my $parameters  = $1;

    print "$parameters\n";
}

我只是想

代码语言:javascript
复制
parameters1

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-23 17:53:51

您将需要一个递归正则表达式来正确地完成它。与此类似(带有x标志):

代码语言:javascript
复制
(?(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),除非它将参数列表包含在捕获组中。

票数 2
EN

Stack Overflow用户

发布于 2015-03-23 23:26:25

你差点就有了。你需要每一行的第一个括号和最后一个括号之间的所有东西,对吗?除非要解析的行比您的示例更复杂,否则您可能需要对代码进行小小的更改。

代码语言:javascript
复制
$line =~ /\((.*)\)/;
my $parameters = $1;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29216933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档