1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| sub matchsequences($$)
{
use re 'eval';
my ($sequence, $amorce)=@_;
my $pre_regex;
# on transforme l'amorce en un ensemble de groupements atomiques de la forme (?>X(?{$match++})|.)
# ce qui fait que $match sera incrémenté à chaque correspondance trouvée
# mais qu'une non-correspondance n'empêche pas la comparaison de se poursuivre.
foreach my $char (split //, $amorce)
{
$pre_regex.= "(?>$char(?{\$match++})|.)";
}
my $match;
my @adequations;
$sequence=~m/
(?{$match=0}) #on initialise ou réinitialise $match
$pre_regex
(?{push @adequations,$match}) #on ajoute la valeur de $match à la liste
(*FAIL) #on force l'échec pour reprendre à zéro
/x;
return @adequations;
} |
Partager