小编vot*_*gnu的帖子

如何在Perl中的整个匹配输出中突出显示捕获组(例如,使用括号括起来)

我有以下代码,成功打印出所有匹配我的正则表达式的字符串到控制台(perl myscript.pl sample_text.txt).

$filename=shift;
open text, $filename or die "error opening $filename\n";

while (my $line = <text>) {
    push @matches, $1 while $line
        =~ m{
          (( [ACGT]{6} )
          CTGA
          [ACGT]
          GAG
          ( [ACGT]{3,6} )
          [ACGT]{2,100}
          (??{ $3 =~ tr/ACGT/TGCA/r })
          ( CGAAA[ACGT] ))
        }xgi;
}

print "$_\n" for @matches;
Run Code Online (Sandbox Code Playgroud)

(这只是我的正则表达式的简化版本,我的捕获组更加复杂,并且没有固定的长度.)

我的sample_text可以在这里下载.

我希望输出保持原样(每行一个匹配),但是我希望匹配我的正则表达式中第一个 ( [ACGT]{6} )最后一个 ( CGAAA[ACGT] )捕获组的子字符串在控制台中打印整个匹配时围绕它们使用括号.

举个例子,当我在上面的示例文件上运行上面的整个脚本时,我得到了附件(sample_text),我得到的一个匹配结果是:

TTTATGCTGATGAGAAAAAACATAAGAAAACGTATAATTTTTTCTAAAAAAGGAAAAAAGACCGAAATTTTAAGCTGTTTTTCGAAAA

我想要看到这样的输出:

(TTTATG)CTGATGAGAAAAAACATAAGAAAACGTATAATTTTTTCTAAAAAAGGAAAAAAGACCGAAATTTTAAGCTGTTTTT(CGAAAA)

regex perl capture-group

2
推荐指数
1
解决办法
83
查看次数

标签 统计

capture-group ×1

perl ×1

regex ×1