So in attempting to become a totally awesome regexer, I have run into a problem that I am hoping you can assist me with.
Specifically I have the following problem, I have text patterns and strings that I want to count the patterns in, but I want to allow for overlapping patterns in the string. I have hunted around these forums and found some good advice, but I have an additional problem. Here is what I can get:
Now what I really want to do is that instead of putting in the pattern in the search, I would like to pass it as a variable, i.e. something like:my $first_counter = 0; my $second_counter = 0; my $sequence = "GGGGGGGAGAAAAAAAAAAAAAAAGAAGGA"; # This is what I initially did, but did not get the right answer $first_counter++ while $sequence =~/AAAAA/g; #Here I get 3 # Because I want to count the overlapping AAAAA in the sequence I hunt +ed around and found this solution $sequence =~ /AAAAA(?{$second_counter++})(?!)/; # This gives the right + answer of 11 print "First counter: $first_counter\n"; print "Second counter: $second_counter\n";
When I run the above I get the following error message (which I admit I do not understand):my @real_count = (0,0,0,0); my $sequence = "GGGGGGGAGAAAAAAAAAAAAAAAGAAGGA"; my @pattern; $pattern[0] = "AAAAA"; $pattern[1] = "GGGGG"; $pattern[2] = "GGAGA"; $pattern[3] = "GAAGG"; for (my $i=0; $i <= 3; $i++) { $sequence =~ /$pattern[$i](?{$real_count[$i]++})(?!)/; } foreach (@real_count) { print "$_\n"; }
"Eval-group not allowed at runtime, use re 'eval' in regex m/AAAAA(?{$real_count$i++})(?!)/ at E:\Bioreka\Test\multimatch.pl line 13."
Can anyone help point me to how to address this error? I would appreciate it. Thanks in advance.
In reply to Regex KungFu help needed by drblove27
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |