Rob Dixon wrote:
It's always confusing when a program written in one language (here, Perl)
creates a program in another (this script is building regular expressions).
Look at the strings those lines are generating.
use strict;
use warnings;
local @ARGV = qw/A B C/;
my $or_pattern = '.*(?:' . join('|', @ARGV) . ')';
my $and_pattern = join('', map{"(?=.*$_)"} @ARGV);
print "Or pattern: $or_pattern\n";
print "And pattern: $and_pattern\n";
**OUTPUT**
Or pattern: .*(?:A|B|C)
And pattern: (?=.*A)(?=.*B)(?=.*C)
Now can you understand those as regular expressions? The former uses
non-capturing parentheses (?: ... ) to find any one of the values anywhere in
the string, while the latter uses a lookahead (?= ... ) to find a point in the
string after which all three of the values appear anywhere.
HTH,
Rob
This is VERY clear. thank you understand it now!!!
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/