如何在Perl中找到与正则表达式匹配的子字符串的索引位置?

4 regex perl

我正在迭代一个文件,在每一行我正在寻找一个正则表达式.如果找到正则表达式,我只想打印"找到它",然后打印在该行中找到它的索引位置.

例:

looking for: 'HDWFLSFKD' need index between two Ds
line: MLTSHQKKF*HDWFLSFKD*SNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
output: 'its found' index location: 10-17
Run Code Online (Sandbox Code Playgroud)

上面的'寻找'很简单,但我打算在那里有复杂的正则表达式.
所以基本上只是想知道是否在字符串中找到正则表达式然后我们如何获得它的索引位置?

这是我到目前为止的代码:

foreach my $line (@file_data)
{
        if ($line=~ /HDWFLSFKD/){
            print "it's found\n"; 
            print "but at what index are the two Ds";
          }   
        else {
            $sequence.=$line;
            print "came in else\n";
        }
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ens 13

我相信你在寻找pos:

 #!/usr/bin/perl

use strict;
use warnings;

my $sequence;
while (my $line = <DATA>) {
    if ($line=~ /(HDWFLSFKD)/g){
        print "its found index location: ", 
            pos($line)-length($1), "-",  pos($line), "\n";
    } else {
        $sequence .= $line;
        print "came in else\n";
    }
}

__DATA__
MLTSHQKKF*HDWFLSFKD*SNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSK*HDWFLSFKD*QNHSIKDIFNRFNHYIYNDLGIRTIA
Run Code Online (Sandbox Code Playgroud)

您还可以使用@-@+变量:

#!/usr/bin/perl

use strict;
use warnings;

my $sequence;
while (my $line = <DATA>) {
        if ($line=~ /HDWFLSFKD/){
                print "its found index location: $-[0]-$+[0]\n";
        } else {
                $sequence .= $line;
                print "came in else\n";
        }
}

__DATA__
MLTSHQKKF*HDWFLSFKD*SNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSK*HDWFLSFKD*QNHSIKDIFNRFNHYIYNDL
Run Code Online (Sandbox Code Playgroud)