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

标签 regex perl

大家早上好,

我有以下代码:

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

我对 1 美元和 2 美元有疑问。我希望输出为 $1$21,换句话说,$1$21 一起。然而,Perl 看到的是 $21 而不是 $21。我该如何避免这个问题?

谢谢。

最佳答案

在变量标识符周围使用大括号将其与周围的文本隔离,${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/

相关文章:

regex - 删除批处理或 PoSh 的引号之间的逗号

perl - Internet Explorer 9 真的是 7 版吗?

无缓冲或行缓冲的 Perl STDIN

perl - 在perl中获取数组中数组的大小

android - 有什么方法可以加快monkeyrunner脚本的执行速度吗?

ruby - 如何在 ruby​​ 中进行命名捕获

java - 如何在Android中使用正则表达式替换两个标志之间的内容?

Javascript跳过字符串中的双管道

perl - 如何在 Perl 中同时捕获 stderr、stdout 和退出代码?

java - 两种正则表达式模式有什么区别