in reply to Partial Searches Against Multiple Wildcards
They'd like to insert an entry like ... D7*D-48*6 ... the expectation being that searching for D7RD or DD482 would return [it]
If I understand correctly, you want a) that each character of the search term match either the same character or * in the corresponding entry; b) that an arbitrary number of characters can appear in the entry between any two characters of the search term.
This corresponds easily to a regular expression: replace each character x of the search term with a choice /x|\*/ (or character class [x*]), and insert a "match anything" pattern /.*/ between each pair:
sub make_regexp { my($search_term) = @_; my $str_re = join '.*', map "[$_*]", split //, $search_term; return qr{$str_re}; }
Since anything can match between search term characters, no special handling is needed for the hyphen. (But if you want to allow them to specify it and have it not match an asterisk, then it will need special handling in the map.)
In terms of precomputing possible matches, the fact that an arbitrary number of characters can appear between any two characters of the search term pretty much rules that out.
Hope this helps.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Partial Searches Against Multiple Wildcards
by p_jacobson (Novice) on Dec 18, 2023 at 04:18 UTC | |
|
Re^2: Partial Searches Against Multiple Wildcards
by LanX (Saint) on Dec 18, 2023 at 03:50 UTC |