Regex 如何获取嵌套捕获组中除最后一个匹配项以外的任何匹配项?

Regex 如何获取嵌套捕获组中除最后一个匹配项以外的任何匹配项?,regex,perl,Regex,Perl,我举了以下例子: $ perl -pe 's/(.(,(.))*)/|$1|$2|$3|/' <<<a,b,c |a,b,c|,c|c| $perl-pe的/(,()*)/|$1 |$2 |$3 |/”正如您所说,我怀疑您没有展示一个具有代表性的示例。但显而易见的方法是确保捕获的字符后面跟一个逗号,如下所示 use strict; use warnings; my $s = 'a,b,c'; $s =~ s/(.(,(.(?=,)))*)/|$1|$2|$3|/; pr

我举了以下例子:

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

$perl-pe的/(,()*)/|$1 |$2 |$3 |/”正如您所说,我怀疑您没有展示一个具有代表性的示例。但显而易见的方法是确保捕获的字符后面跟一个逗号,如下所示

use strict;
use warnings;

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

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

print $s;
输出

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

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

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

echo '<start>a,b,c<end>' | perl -pe 's/<start>\K(.*?)(?=<end>)/"|" . join("|", split ",", $1) . "|"/e'
echo'a,b,c'| perl-pe's/\K(.*)(=)/“|”。加入(“|”、拆分“、”、$1)。“|”/e”
产出:

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

Regex捕获组在重复时只捕获一个匹配项(最后一个匹配项)(如使用
*
),您需要使用另一种方法来重复模式,有一种方法使用
\G
\K
,您可以使用。在Mike的评论中添加一些非常快速的内容:
\G,?\K([^,]+)
。请参见。顺便说一句,为什么不按
拆分?@HamZa可能我对示例进行了太多的分条处理。开头和结尾都有更多的分条处理,这会阻止拆分。请您给出一个更深入的解决方案,以便我们能给您一个正确的答案,@HamZa的建议是我能想到的最好的方法,或者扫描一个字符串f或者几场比赛中的每一场,但这取决于你到底想做什么。