http://qs321.pair.com?node_id=65241

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Can someone help or direct me to the answer?

I have a flattext dbase. I want to let people search by inputing their search strings. But I want to minimize the matches to only 4-5 characters. Ok, that was not very clear.

Let's say the item in my dbase is "saturday".
The input "is today saturd or sunday?" or "atur"

Basically, I want to return "abc4567def" as a match when the users query with either "1234567890" or
"---4567-----" or "4567".

The minimal match function does not seem to fit this case

Thank you for any help. Danny

Replies are listed 'Best First'.
Re: help with minimal matches
by Anonymous Monk on Mar 18, 2001 at 13:29 UTC
    my $search = 'is today saturd or sunday?'; my $record = 'saturday'; my $pattern; my @chars; my @patterns; my $len = 4; @chars = split(//, $search); for(my $i = 0; $i <= length($search) - $len; $i++) { push(@patterns, quotemeta(join('', @chars[$i .. $i + $len - 1]))); } $pattern = '(?:'.join('|', @patterns).')'; if($record =~ /$pattern/) { print "Match with pattern $pattern\n"; }
Re: help with minimal matches
by I0 (Priest) on Mar 19, 2001 at 04:53 UTC
    use String::Approx 'amatch'; @matches = amatch("saturday", ['4S0I0'], "is today saturd or sunday?", + "atur"); @matches = amatch("abc4567def", ['6S0I0'], "1234567890", "---4567----- +", "4567");
Re: help with minimal matches
by Anonymous Monk on Mar 19, 2001 at 11:30 UTC
    Thanks for the help. Danny.