ここで、正規表現を構築することにより、繰り返しが7回連続して発生するという要件で、ヌクレオチドの文字列を3つのヌクレオチドの繰り返しパターンの検索にかけることについて、素晴らしい情報を得ました。
my $regex1 = qr/( ([ACGT]{3}) \2{6,} )/x;
10 の連続で 2 つの核を検索する方法と、7 の連続で 4 つの核を検索する方法を理解しています。
しかし、ユーザーが入力ファイルをポイントできるようにコードを拡張し、上記の正規表現と、他の 2 つの検索用に作成する必要がある他の 2 つの正規表現をチェックできるようにしたいと思います。
編集:入力ファイルを上記のような複数の正規表現にさらすにはどうすればよいですか? コード内に他の 2 つの正規表現を作成しました (ハッシュ記号でノックアウト)。
これが私の現在のコードです
print "Please specify the file location (DO NOT DRAG/DROP files!) then press ENTER:\n";
$seq = <STDIN>;
#Remove the newline from the filename
chomp $seq;
#open the file or exit
open (SEQFILE, $seq) or die "Can't open '$seq': $!";
#read the dna sequence from the file and store it into the array variable @seq1
@seq1 = <SEQFILE>;
#Close the file
close SEQFILE;
#Put the sequence into a single string as it is easier to search for the motif
$seq1 = join( '', @seq1);
#Remove whitespace
$seq1 =~s/\s//g;
#Count of number of nucleotides
#Initialize the variable
$number = 0;
$number = length $seq1;
#Use regex to say "Find 3 nucelotides and match at least 6 times
# qr(quotes and compiles)/( ([nucs]{number of nucs in pattern}) \2{number of repeats,}/x(permit within pattern)
my $regex1 = qr/( ([ACGT]{3}) \2{6,} )/x;
#my $regex = qr/( ([ACGT]){2}) \2{9,} )/x;
#my $regex2 = qr/( ([ACGT]{4}) \2{6,} )/x;
#Tell program to use $regex on variable that holds the file
$seq1 =~ $regex1;
#Now print the results to screen
#This will need to change to printing to a file (WHAT KIND OF FILE?)in the following manner :site, nucelotide match, # of times, length of full sequence
printf "MATCHED %s exactly %d times\n", $2, length($1)/3;
print "Length of sequence: $number\n";
exit;