On Sat, 2006-01-07 at 01:29 +0200, Filip Jursik wrote:
> Well, I thought, that when I write:
> 1) /A(.*)B/, $1 will hold the longest string enclosed by A and B
> 2) /A(.*?)B/, $1 will hold the shortest string enclosed by A and B
> 
> Does it work like this or the "?" after the ".*" has a different meaning than 
> changing the match from the longest to the shortest possible one?

Not exactly. For: /A(.*?)B/ It will match the first A, then the shortest
string to a B. For: /A(.*)B/ It will match the first A, then the longest
string to B.

#!/usr/bin/perl

use strict;
use warnings;

chomp( my @strings = <DATA> );

print "/A(.*)B\n";
for ( @strings ){
  /A(.*)B/;
  printf "%-30s %s\n", "'$_'", "'$1'";
}

print "/A(.*?)B\n";
for ( @strings ){
  /A(.*?)B/;
  printf "%-30s %s\n", "'$_'", "'$1'";
}

__DATA__
A B
A A B
A B B
A A B B
A B B B B B B B B


-- 
__END__

Just my 0.00000002 million dollars worth,
   --- Shawn

"For the things we have to learn before we can do them, we learn by doing them."
  Aristotle

* Perl tutorials at http://perlmonks.org/?node=Tutorials
* A searchable perldoc is at http://perldoc.perl.org/



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to