如何获得嵌套捕获组中的最后一个匹配?

时间:2014-05-23 10:15:54

标签: regex perl

我有以下示例:

$ perl -pe 's/(.(,(.))*)/|$1|$2|$3|/' <<<a,b,c
|a,b,c|,c|c|

如何访问嵌套捕获组中的最后一个匹配项?在此示例中,嵌套捕获组仅捕获c。如何参考b

2 个答案:

答案 0 :(得分:1)

正如你所说,我怀疑你没有展示一个有代表性的例子。但显而易见的方法是确保捕获的字符后跟逗号,如此

use strict;
use warnings;

my $s = 'a,b,c';

$s =~ s/(.(,(.(?=,)))*)/|$1|$2|$3|/;

print $s;

<强>输出

|a,b|,b|b|,c

答案 1 :(得分:1)

即使示例之前和之后有数据,您仍然可以依赖split。您只需要使用多个步骤。

以下演示了对于随机构造的示例:

echo '<start>a,b,c<end>' | perl -pe 's/<start>\K(.*?)(?=<end>)/"|" . join("|", split ",", $1) . "|"/e'

输出:

<start>|a|b|c|<end>