大家早上好,
我有以下代码:
$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
而不是 $2
和 1
。我该如何避免这个问题?
谢谢。
最佳答案
在变量标识符周围使用大括号将其与周围的文本隔离,${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;
关于regex - Perl - 正则表达式和匹配变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24115849/