Please consider the following code:-
$sample = "A-E-H-L"; @options = ( "A-B-F-G-H-K-M", # idx = 0 "A-E-G-H-L", # idx = 1 "A-C-E-G-H-J-L", # idx = 2 "B-F-H-K", # idx = 3 "A-B-F-G-H-K-L", # idx = 4 "C-H" # idx = 5 ); $mc = "[A,E,H,L]"; @matches = grep(/$mc/, @options); foreach $x (@matches) { printf("> %s\n", $x); }
The intention is to find each of the elements in @options that includes all of the elements in $sample. The hyphens ("-") are sort-of important, mainly because they are delimiters between each 'sub-element'.
The code I've shown obviously doesn't work -- I was trying to establish a 'class' for a regex -- but let me explain it using the contents of $sample:...
For the example of "A-E-H-L", I'm looking in the @options array for those elements that contain "A" and "E" and "H" and "L". If $options[$i] contains all of those items ("A", "E", etc), then it will be recorded as a match. Thus, the @matches array should, ideally contain the elements:-
@matches = (1,2);
Note that the elements of $sample will always be in 'increasing' order (the data could be "A-F-H" but it won't be "H-A-F").
An interesting generalization of this would be to match on a subset of $sample. For example, if we allow a subset of elements from $sample to match, we would have the resulting @matches = (0,1,2,3,4,5).
There are probably a lot of other options that could be considered... but this is a good start, I think.
Would appreciate any pointers, please...
In reply to Pattern Matching with a Selected Sub-String by ozboomer
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |