in reply to Finding One String in Another

Try this:

 perl -e ' $a="abc"; $b="aCd"; @m = $a=~ /([^$b])/i; print "@m\n"'

Array @m will be empty whenever $a can be built from the letters in $b !

update: This regex says that "aa" can be built from letters in "a". But it can be used as a filter, before applying a more complex algorithm.

This is an example on how to use it (I don't claim it is perfect :)

use strict; my ($a,$b) = (shift, shift); my @m = $a =~ /([^$b])/ig; if ($#m < 0) { print "ok, can build '$a' using letters in '$b'\n"; foreach my $letter (split // => $a) { unless ($b =~ s/$letter//) { print "but will need an extra '$letter'\n" }; } } else { print "can't build '$a' because I don't have '",join("' and '", @m +),"'\n"; }

update: use of /ig may make it slower, but it gives an estimate on how many characteres are missing

Replies are listed 'Best First'.
Re: Finding One String in Another
by Abigail-II (Bishop) on Jul 31, 2002 at 16:59 UTC
    I think not!
    $ perl -e ' $a="aa"; $b="a"; @m = $a=~ /([^$b])/i; print "@m\n"' $
    But you can't turn one a into two.

    Abigail