在Perl中成功进行正则表达式匹配后,如何访问捕获的子串?

shu*_*ter 1 regex perl

我在Perl中搜索一个字符串并将其存储在另一个标量变量中.我想打印这个标量变量.下面的代码似乎不起作用.我不确定出了什么问题,以及正确的方法是什么.为什么在程序中不存在时打印"1"?

正在运行的数据

数据

      13 E 0.496 -> Q 0.724
      18 S 0.507 -> R 0.513
      19 N 0.485 -> S 0.681
      21 N 0.557 -> K 0.482
Run Code Online (Sandbox Code Playgroud)

以下是我的代码:

#!/usr/bin/perl
use strict;
use warnings;

my $find = '\s{10}[0-9]{2}\s[A-Z]'; #regex. it can also be '\s{10}[0-9]{2}\s[A-Z]' 
                                    #both dont seem to work
my @element;
open (FILE, "/user/run/test") || die "can't open file \n";
while (my $line = <FILE>) {
    chomp ($line);
    print "reached here1 \n"; # to test whether it reading the program properly
    my $value = $line=~ /$find/ ;
    print "reached here 3 \n"; # to test whether it reading the program properly
    print "$value \n";
}
exit;
Run Code Online (Sandbox Code Playgroud)

OUTPUT

reached here1

1 

reached here 3 

reached here1 

1 

reached here 3 
Run Code Online (Sandbox Code Playgroud)

JB.*_*JB. 7

正则表达式匹配操作返回true(1)表示匹配成功,否则返回false.如果要检索匹配项,则应尝试以下操作之一:

  • 使用匹配变量$ 1,$ 2 ...
  • 匹配列表上下文 ($m1, $m2) = $string =~ /$regex/

请注意,您需要在正则表达式中使用捕获才能使用它们.你还没做什么.

您应该查看perlop中的完整文档,"Regexp Quote-Like Operators"部分