Perl - 正则表达式和匹配变量

时间:2014-06-09 07:46:42

标签: regex perl

早上好,伙计们,

我有以下代码:

$line =~ s/gene_id "([A-Za-z0-9:\-._]*_[oO])([_.])[0-9]*";/gene_id "$1$21";/g;

我遇到1美元和2美元的问题。我希望输出为$1$21,换句话说,$1$2以及1。但是,Perl会看到$21而不是$21。我该如何避免这个问题?

感谢。

1 个答案:

答案 0 :(得分:3)

在变量标识符周围使用大括号将其与周围文本${2}

隔离开来
$line =~ s/gene_id "([A-Za-z0-9:\-._]*_[oO])([_.])[0-9]*";/gene_id "$1${2}1";/g;

此外,由于您将所有其他文字保持不变,因此您只需使用\K来修改其后的内容即可。更不用说使用\w来减少你的第一个角色类:

$line =~ s/gene_id "[\w:\-.]*_[oO][_.]\K[0-9]*";/1";/g;