in reply to Backreference regex help
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, |
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Backreference regex help
by rocketperl (Sexton) on Nov 01, 2014 at 07:42 UTC |