Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Pattern searching allowing for mis-matches...

by Albannach (Monsignor)
on Dec 13, 2009 at 21:16 UTC ( [id://812616]=note: print w/replies, xml ) Need Help??


in reply to Pattern searching allowing for mis-matches...

Another option I often use for this sort of thing is Text::Levenshtein. You should use the XS version if available for your platform though as the speed difference is significant. Below I've assumed the string must have the same length, but that is not necessary as an insertion or deletion also counts as distance. Accommodating variable length strings is left as an exercise for the reader. ;-)
use strict; use warnings; use Text::Levenshtein qw(distance); my $text = 'TGATTGAA'; my $search = 'TGAT'; my $fuzz = 1; # how far off a match can we be for my $start (0..(length($text) - length($search)) ) { my $chunk = substr($text,$start,length $search); print "checking for $search from position $start: $chunk: "; my $dist = distance($search, substr($text, $start, length $search)); if($dist == 0) { print "Match!\n"; }elsif($dist <= $fuzz) { print "Close enough\n"; }else{ print "nope\n"; } }

checking for TGAT from position 0: TGAT: Match!
checking for TGAT from position 1: GATT: nope
checking for TGAT from position 2: ATTG: nope
checking for TGAT from position 3: TTGA: nope
checking for TGAT from position 4: TGAA: Close enough

--
I'd like to be able to assign to an luser

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://812616]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (3)
As of 2024-03-29 01:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found