|
hi again josh --
in thinking about my previous post, it seemed that i had not expressed
myself
clearly. see addenda below.
In a message dated 7/19/2006 6:51:27 P.M. Eastern Standard Time,
[EMAIL PROTECTED] writes:
> hi josh --
> > In a message dated 7/19/2006 4:22:20 P.M. Eastern Standard Time, > [EMAIL PROTECTED] writes: > > > Gurus- > > > > I'm trying to help a co-worker on reg exp/pattern match issue. > > > > we have a set of items to go through and another set of input that's > > tested against the first. > > > > we need to check that items in the second set are a one-for-one match or > > subset of the latter. > > > > > > ie: > > > > $var1 =~ /$var2/ > > > > where this returns true in a case such as $var1=Jose, Joseph, and Josh and > > $var2 will be James and Joseph > > > > when $var2 is James they need to return false and when it is Joseph both > > Jose and Joseph should return true while Josh returns false. > > > > So far we haven't found a solution in orielly and trying > > > > if( $var1 =~ m/$var2/) { print "$var2 contains $var1\n"; } > > else { print "failure on $var2 and $var1\n"; } > > > > > > has failed to work. > > > > -Josh > > > i may not understand this correctly, it seems to me that you are saying that items > in the first set (represented by $var1) will always be equal to or less than the length > of items in the second set (represented by $var2). i'm also assuming that by > ``subset'' you mean ``subset anchored at the beginning of the string''. > > if that is so, it seems that the way to go about comparing the two sets is the opposite > of the example you give, e.g., > $var2 =~ /$var1/; > since we don't really care if part of $var2 slops over on the end. or a little more clearly, you seem to be looking for the pattern /Joseph/
in the
string 'Jose'. it might be better to look for the pattern
/Jose/ in the
string 'Joseph'.
>
> maybe something like this: > > C:[EMAIL PROTECTED]>perl -we "use strict; my $v1 = shift; for my $v2 (@ARGV) { > my $re = qr/$v2/x; > print qq($v1 ), ($v1 =~ / ^ $re /x) ? q(contains) : q(does NOT contain), qq( $v2 \n) }" > Joseph Jose Joseph Josh Josephhh > Joseph contains Jose > Joseph contains Joseph > Joseph does NOT contain Josh > Joseph does NOT contain Josephhh > > note the ^ beginning of string anchor; easy enough to take this out and have the match > be anywhere in the string. > > there's also a version that doesn't involve regexes: > btw -- the following match is not anchored at the beginning of the
string.
use index() == 0 to anchor at the beginning of the
string.
> C:[EMAIL PROTECTED]>perl -we "use strict; my $v1 =
shift; for my $v2 (@ARGV) {
> print qq($v1 ), (index($v1, $v2) >= 0) ? q(contains) : q(does NOT contain), qq( $v2 \n) }" > Joseph Jose Joseph Josh Josephhh > Joseph contains Jose > Joseph contains Joseph > Joseph does NOT contain Josh > Joseph does NOT contain Josephhh again, hth
|
_______________________________________________ ActivePerl mailing list [email protected] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
