1

我的数据看起来像:

NC_004415 NC_010199 ([T(trnH ,trnS1 trnL1 ,)])
NC_006131 NC_010199 ([T(trnH ,trnS1 trnL1 ,)])
NC_006355 NC_007231 ([T(trnM ,trnQ ,)])

我想捕获以下之间的所有内容[]

while( my $line = <crex> )

 {  $t=$line=~m/(\[.*\])/;

    print $t;
 }

的输出$t1。为什么它不起作用?

4

3 回答 3

3

由于您使用的是捕获组,因此您可以$1在匹配成功后使用:

if($line =~ m/(\[.*\])/) {
    print $1;
}
于 2012-09-16T01:50:08.070 回答
3

$line =~ m/(\[.*\])/返回列表上下文中匹配项的列表,但您在标量上下文中使用它。在标量上下文中,匹配运算符返回一个布尔值,指示匹配是否成功。因此你得到1. 您可以使用

my ($t) = $line =~ m/(\[.*\])/;

创建列表上下文,或者您可以使用$1而不是使用$t.

于 2012-09-16T01:54:54.687 回答
2

在 周围使用括号$t

($t) = $line =~m/(\[.*\])/;

请参阅perldoc perlretut(提取匹配项)

我相信您m//在标量上下文中使用匹配运算符 () 并将结果存储在$t. 由于匹配成功,m//返回 1。参考perldoc perlop

于 2012-09-16T01:48:03.430 回答