Hello rocketperl,
Your regex is pretty close to being correct. Just two tweaks needed:
You need to count the capture ([A-Z]) in the total. So, to get 5 or more, you need m/([A-Z])\g2{4,}/.
To see the repeated letters, you need another capture:
#! perl use strict; use warnings; use constant MIN_MATCHES => 5; my %sequ = ( 1 => 'abcXXXXXef', 2 => 'abcYYYYYYef', 3 => 'abZZZZef', ); my $match_at_least = MIN_MATCHES - 1; for my $k (1 .. 3) { if (my @matches = $sequ{$k} =~ m/(([A-Z])\g2{$match_at_least,})/) { print "Match: $matches[1] in $matches[0] \n"; } }
Output:
16:47 >perl 1069_SoPW.pl Match: X in XXXXX Match: Y in YYYYYY 16:47 >
Note that capture groups are numbered according to the position of the left parenthesis, so the whole sequence of repeated characters is \g1 and the first character is \g2. I have also removed the /g modifier to keep things simple.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: Backreference regex help
by Athanasius
in thread Backreference regex help
by rocketperl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |