我怎样才能让perl grep执行正则表达式捕获

Yet*_*ene 7 perl

我试图通过在下面的代码中获取(.*)的内容,使用grep捕获带有grep的子字符串.

            @substring = grep /^test-results(.*)/,@$(array_reference);
Run Code Online (Sandbox Code Playgroud)

这不行......

ike*_*ami 8

在列表上下文中,正则表达式匹配返回其捕获匹配的列表,因此您只需要:

@substrings = map /^test-results(.*)/, @$array;
Run Code Online (Sandbox Code Playgroud)


sar*_*old 7

可能该map功能更适合您想要的功能.您正在寻找类似于以下(未经测试)代码的内容:

@substrings = map { /^test-results(.*)/ ? $1 : () } @{ $arrayref };
Run Code Online (Sandbox Code Playgroud)

  • 永远不要在条件之外使用`$ 1`和朋友.捕获来自上一次成功的比赛.更好的是`@substrings = map {/^test-results(.*)/?$ 1:()} @ {$ arrayref};`. (2认同)